Python 用本原算子求N到K深度的阶乘

Python 用本原算子求N到K深度的阶乘,python,while-loop,factorial,Python,While Loop,Factorial,难以使用以下方法提出解决方案: 迭代/控制流和 积累 不只是一个解决方案,我更喜欢有提示和解释的答案 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 >

难以使用以下方法提出解决方案:

迭代/控制流和 积累 不只是一个解决方案,我更喜欢有提示和解释的答案

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
忽略k=0,您必须将k个数字相乘,以n开头,以n-k结尾。上面的循环是k次,因为我将从0开始递增1,你可以简单地从n中减去它,得到下一个要乘以的数字

编辑:通过提前返回确保k=0始终返回1

Edit2:删除内置范围函数


Edit3:确保深入k

既然你不想要解决方案,而是想知道代码失败的原因,我会给你一些提示

逻辑是错误的,这就是原因

事实在每次迭代中都会更新,
仔细检查while条件idef 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