问题:Count_Change
一旦机器接管,每枚硬币的面额将为2的幂:1美分,2美分,4美分,8美分,16美分等。一枚硬币可以值多少钱。
给定一个正整数,如果硬币的总和为数量,则一组硬币将改变数量。例如,以下设置更改了7:
7 1-cent coins
5 1-cent, 1 2-cent coins
3 1-cent, 2 2-cent coins
3 1-cent, 1 4-cent coins
1 1-cent, 3 2-cent coins
1 1-cent, 1 2-cent, 1 4-cent coins
因此,有7种方法可以对7进行更改。编写一个递归函数count_change,该函数需要一个正整数,并返回使用将来的这些硬币对金额进行更改的方法。
样品运行;
def count_change(amount):
"""Return the number of ways to make change for amount.
>>> count_change(7)
6
>>> count_change(10)
14
>>> count_change(20)
60
>>> count_change(100)
9828
>>> from construct_check import check
>>> # ban iteration
>>> check(HW_SOURCE_FILE, 'count_change', ['While', 'For'])
True
我的代码:
def largestPart(k):
if k <= 1:
return 0
else:
i = 1
while i < k:
i = 2 * i
return i
def partFunction(n,m):
if n <= 0:
return 0
elif m <= 0:
return 0
elif n == 1:
return 1
elif m == 1:
return 1
return partFunction(n - m, m) + partFunction(n, m // 2)
return partFunction(amount, largestPart(amount))
我的问题:当输入值n等于10时,返回值假定为14,但是我一直保持10为返回值。谁能告诉我为什么我得到10?非常感谢您的帮助!
答案 0 :(得分:0)
如果n
等于零,则partFunction
应该返回1。