pygorithm/recursive/recursive.py

62 lines
1.5 KiB
Python
Raw Normal View History

2023-12-04 12:48:44 +08:00
"""
递归三定律
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