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)!对我来说这似乎是无限的:/
感谢。
答案 0 :(得分:3)
这是一个递归函数。
if n == 0:
这是非常自我解释的。在此if
声明中,我们会检查n
是否等于0
。
return 1L
如果n
确实等于0
,我们会在这种情况下返回1L
(1 Long
或基本上1
。)注意,如果我们得到这个return
,我们不会继续3 rd 行,因为return
就像break
。
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)))
。还有我们的终止条件,不再调用fact
:3 * (2 * (1 * (1)))
。所以...不是那么无限:)