Python 2.7代码,需要解释

Python 2.7 code, need explanation

def fact( n ):
    """fact( number ) -> number

    Returns the number of permutations of n things."""
    if n == 0:
        return 1L
    return n*fact(n-1L)

任何人都可以向我解释这段代码的作用? 我对 return 语句感到困惑... n*fact(n-1L)!这对我来说似乎是无限的:/

谢谢。

不是无限的。事实上,它是归纳定义的经典示例,在编程中转化为递归。要让它工作,需要有两个部分:

  • 终止条件,描述问题何时足够简单以至于我们知道答案。在这种情况下,fact(0).
  • 该怎么办
  • 非终止条件,描述了如何将一个复杂的问题分解成更简单的问题。在这种情况下,查找 fact(n - 1) 并乘以 n

所以...假设您有 fact(3)。它没有终止,所以它是 3 * fact(2)。仍然没有终止,所以它是 3 * (2 * fact(1))。还在做! 3 * (2 * (1 * fact(0)))。还有我们的终止条件,它不再调用 fact3 * (2 * (1 * (1)))。所以...不是那么无限:)

这是一个递归函数。

逐行

第 1 行:if n == 0:

这是不言自明的。在此 if 语句中,我们检查 n 是否等于 0.

第 2 行:return 1L

如果n确实等于0,我们return1L(1Long,或者在这种情况下本质上是1 .) 注意,如果我们到达这个 return,我们不会继续到第 3rd 行,因为 return 就像 break ].

第 3 行:return n*fact(n-1L)

我们将 n 乘以 n-1 并将其传递回递归函数,因为它正在检查阶乘,我们希望一直进行直到 n 为 0 ( 6! 不应产生 6*5,它应该产生 6*5*4*3*2*1。)