def coin(n,lst):
if n<=1:
return 1
else:
total=0
for i in range(len(lst)):
change=lst[i]
if change>n:
continue
else:
result=coin(n-change,lst[i:])
if result>0:
total+=result
return total
print(coin(5,[1,2,5,6]))
答案 0 :(得分:0)
错误是在基本情况下
if n<=1:
return 1
仅当1
是允许的硬币之一时才有效。但是在递归的情况下,您将列表切成lst[i:]
,因此并非每次都不允许所有硬币。有时,1不是允许的硬币之一,在这种情况下,共有零种方法可以使总数达到1,而不是一种方法。要解决此问题,请编写类似以下内容的
if n <= 1:
if n == 0 or n in lst:
return 1
else:
return 0
这是正确的,因为您可以在基本情况下更改n
,如果n
为0(我们总是可以为0),或者n
为1并且1为允许的硬币之一。
也就是说,让递归案例处理1更简单,因此基本案例只需要处理0;这也是正确的:
if n == 0:
return 1
答案 1 :(得分:-1)
const mycustomStruct* pFlmcCtrl = static_cast<const mycustomStruct*>(pMdbCluster);