我有以下代码输出6,720。然而,在查看代码后,我不知道720是如何得到的。
def f(n):
if (n==0):
return 1
else:
v = f(n-1)
r = n * v
return r
n = 6
print(n, f(n))
答案 0 :(得分:3)
您的函数使用名为recursion的技术。
答案 1 :(得分:1)
您的f
函数正在计算其参数的factorial。它通常用感叹号表示。
简单地说就是:
6! = 6 * 5 * 4 * 3 * 2 * 1
你的循环以递归方式调用自身,以便计算5,4,3,2,1的值,然后当它达到0时它会停止递归。然后f
开始返回。这就是你的720值的来源。
答案 2 :(得分:1)
f(6) = 6 * f(5) = 720
|------------------------------------
5 * f(4) = 120
|-----------------------------
4 * f(3) = 24
|----------------------
3 * f(2) = 6
|----------------
2 * f(1) = 2
|---------
1 * f(0) = 1
|
1 = 1 (base case)
答案 3 :(得分:1)
Python包含一个trace module,可以准确显示正在发生的事情。
以下是您脚本的输出:
~/tmp $ python3.2 -m trace --trace fact.py
--- modulename: fact, funcname: <module>
fact.py(1): def f(n):
fact.py(9): n = 6
fact.py(10): print(n, f(n))
--- modulename: fact, funcname: f
fact.py(2): if (n==0):
fact.py(5): v = f(n-1)
--- modulename: fact, funcname: f
fact.py(2): if (n==0):
fact.py(5): v = f(n-1)
--- modulename: fact, funcname: f
fact.py(2): if (n==0):
fact.py(5): v = f(n-1)
--- modulename: fact, funcname: f
fact.py(2): if (n==0):
fact.py(5): v = f(n-1)
--- modulename: fact, funcname: f
fact.py(2): if (n==0):
fact.py(5): v = f(n-1)
--- modulename: fact, funcname: f
fact.py(2): if (n==0):
fact.py(5): v = f(n-1)
--- modulename: fact, funcname: f
fact.py(2): if (n==0):
fact.py(3): return 1
fact.py(6): r = n * v
fact.py(7): return r
fact.py(6): r = n * v
fact.py(7): return r
fact.py(6): r = n * v
fact.py(7): return r
fact.py(6): r = n * v
fact.py(7): return r
fact.py(6): r = n * v
fact.py(7): return r
fact.py(6): r = n * v
fact.py(7): return r
6 720