""" 递归三定律: 1 递 归 算 法 必 须 具 有 基 本 情 况 2 递 归 算 法 必 须 向 基 本 情 况 靠 近 3 递 归 算 法 必 须 以 递 归 方 式 调 用 自 身 """ def recursive_sum(nums: list): if 1 == len(nums): return nums[0] return nums[0] + recursive_sum(nums[1:]) # 使用递归的方式实现进制转换 def recursive_num_conversion(num: int) -> str: if num == 0: return '' return recursive_num_conversion(num // 2) + str(num % 2) # 找零问题:类似贪婪,经量找出最少纸币搭配 def rec_mc1(changes: list[int], cash: int): # 全用1元纸币时最少找零数 min_amount = cash try: if changes.index(cash): return 1 except Exception as e: for c in changes: # cash - c,表示使用了一张面额为c的来找零,所以需要+1 num = 1 + rec_mc1(changes, cash-c) if num < min_amount: min_amount = num return min_amount def rec_mc2(changes: list[int], cash: int, min_changes: int,): min_amount = cash try: if changes.index(cash): min_changes[cash] = 1 return 1 except Exception as e: if min_changes[cash] > 0: return min_changes[cash] else: for c in changes: num = 1 + rec_mc2(changes, cash - c, min_changes) if num < min_amount: min_amount = num min_changes[cash] = min_amount return min_amount