pygorithm/recursive/recursive.py

62 lines
1.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""
递归三定律:
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