使用原始运算符查找 N 的阶乘,直到 K 深度
Using primitive operators to find factorial of N up to K depth
使用以下方法想出解决方案有困难:
- 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
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 你想乘以 n 开始并以 n-k 结束的 k 个数字。上面的循环 k 次,因为 i 将从 0 开始递增 1,你可以简单地从 n 中减去它得到下一个要乘以的数字。
编辑:通过提前返回确保 k=0 总是返回 1
Edit2:删除内置范围函数
Edit3:确保深入了解
既然你不想要一个解决方案,而是想要代码失败的原因,我会给你一些指示
这里逻辑错误是为什么
- 每次迭代都会更新事实,
- 仔细检查 while 条件 i < k 或 i <= k?
使用以下方法想出解决方案有困难:
- 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
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 你想乘以 n 开始并以 n-k 结束的 k 个数字。上面的循环 k 次,因为 i 将从 0 开始递增 1,你可以简单地从 n 中减去它得到下一个要乘以的数字。
编辑:通过提前返回确保 k=0 总是返回 1
Edit2:删除内置范围函数
Edit3:确保深入了解
既然你不想要一个解决方案,而是想要代码失败的原因,我会给你一些指示
这里逻辑错误是为什么
- 每次迭代都会更新事实,
- 仔细检查 while 条件 i < k 或 i <= k?