问题描述
- iteration / control-flow和
- 积累。
def falling(n,k):
"""Compute the falling factorial of N to depth K.
>>> falling(6,3) # 6 * 5 * 4
120
>>> falling(4,3) # 4 * 3 * 2
24
>>> falling(4,1) # 4
4
>>> falling(4,0)
1
"""
fact = n
i = 0
while i <= k:
fact = fact * fact - 1
i += 1
n -= 1
return fact
解决方法
因为您不想要解决方案,而是想知道代码为什么失败,所以请给您一些指针
这里的逻辑是错误的
- 事实在每次迭代中都会更新,
- 仔细检查条件条件i
def falling(n,k):
"""Compute the falling factorial of N to depth K.
>>> falling(6,3) # 6 * 5 * 4
120
>>> falling(4,3) # 4 * 3 * 2
24
>>> falling(4,1) # 4
4
>>> falling(4,0)
1
"""
if k == 0:
return 1
return_value = 1
counter = 0
while counter < k:
return_value = return_value * (n-counter)
counter += 1
return return_value
忽略k = 0,您必须将k个数字从n开始以n-k结尾。上面的代码循环了k次,由于我将从0开始加1,因此您可以简单地从n中减去它以获得下一个要乘以的数字。
编辑:确保尽早返回k = 0总是返回1
Edit2:删除内置的范围功能
Edit3:确保深入了解