list = (100, 50, 20, 10, 5, 2, 1) result_dict = {} def cache(func): def wrapper(*args): if args in result_dict: return result_dict[args] else: result = func(*args) result_dict[args] = result return result return wrapper @cache def method2(list1, sum): if len(list1) == 1: if sum % list1[0] == 0: return 1 return 0 else: max_coin = list1[0] # 2等因子 other_coins = list1[1:] num = 0 result = 0 while 1: if num * max_coin > sum: return result result += method2(other_coins, sum - num * max_coin) num += 1 if __name__ == '__main__': print(method2(list, 200)) print(result_dict)