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)))
。还有我们的终止条件,它不再调用 fact
:3 * (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
。)
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)))
。还有我们的终止条件,它不再调用 fact
:3 * (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
。)