Python 2.7代码,需要解释

时间:2015-01-28 01:47:58

标签: python function

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)!对我来说这似乎是无限的:/

感谢。

2 个答案:

答案 0 :(得分:3)

这是一个递归函数。

逐行

第1行:if n == 0:

这是非常自我解释的。在此if声明中,我们会检查n是否等于0

第2行:return 1L

如果n确实等于0,我们会在这种情况下返回1L(1 Long或基本上1。)注意,如果我们得到这个return,我们不会继续3 rd 行,因为return就像break

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

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

答案 1 :(得分:2)

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

  • 终止条件,描述问题何时足够简单以便我们知道答案。在这种情况下,如何处理fact(0)
  • 非终止条件,描述如何将复杂问题分解为更简单的问题。在这种情况下,请查看fact(n - 1)并乘以n

所以......让我们说你fact(3)。它没有终止,因此它是3 * fact(2)。仍然没有终止,所以它是3 * (2 * fact(1))。仍在继续! 3 * (2 * (1 * fact(0)))。还有我们的终止条件,不再调用fact3 * (2 * (1 * (1)))。所以...不是那么无限:)