使用基本运算符查找N阶乘直到K深度

问题描述

使用以下方法很难解决问题:

  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

解决方法

因为您不想要解决方案,而是想知道代码为什么失败,所以请给您一些指针

这里的逻辑是错误的

  • 事实在每次迭代中都会更新,
  • 仔细检查条件条件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:确保深入了解