使用原始运算符查找 N 的阶乘,直到 K 深度

Using primitive operators to find factorial of N up to K depth

使用以下方法想出解决方案有困难:

  1. iteration/control-flow 和
  2. 积累。

不仅仅是一个解决方案,更希望有一个带有提示和解释的答案。

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?