我有一个用 python 编写的简单阶乘函数,其中嵌入了一堆调试,以帮助我理解正在发生的事情。然而,输出让我更加困惑。谁能帮我理解? (顺便说一句,如果出现打印输出计时问题,我运行了几次但得到了完全相同的输出。)
recursive_function.py
def recursive(n):
if n == 1:
return 1
print ('n : {}'.format(n))
print ('recursive return value is: {}'.format(n*recursive(n-1)))
return n*recursive(n-1)
x = recursive(5)
print('***** End result is: {}'.format(x))
(带行号)
1 n : 5
2 n : 4
3 n : 3
4 n : 2
5 recursive return value is: 2
6 recursive return value is: 6
7 n : 2
8 recursive return value is: 2
9 recursive return value is: 24
10 n : 3
11 n : 2
12 recursive return value is: 2
13 recursive return value is: 6
14 n : 2
15 recursive return value is: 2
16 recursive return value is: 120
17 n : 4
18 n : 3
19 n : 2
20 recursive return value is: 2
21 recursive return value is: 6
22 n : 2
23 recursive return value is: 2
24 recursive return value is: 24
25 n : 3
26 n : 2
27 recursive return value is: 2
28 recursive return value is: 6
29 n : 2
30 recursive return value is: 2
31 ***** End result is: 120
(没有行号的更干净的输出)
n : 5
n : 4
n : 3
n : 2
recursive return value is: 2
recursive return value is: 6
n : 2
recursive return value is: 2
recursive return value is: 24
n : 3
n : 2
recursive return value is: 2
recursive return value is: 6
n : 2
recursive return value is: 2
recursive return value is: 120
n : 4
n : 3
n : 2
recursive return value is: 2
recursive return value is: 6
n : 2
recursive return value is: 2
recursive return value is: 24
n : 3
n : 2
recursive return value is: 2
recursive return value is: 6
n : 2
recursive return value is: 2
***** End result is: 120
最佳答案
该函数接受一个数字并计算 factorial结果。
因此,对于 5
的值结果是 5 * 4 * 3 * 2
这是 120
.
使该函数成为递归函数是有意义的,因为 5 的阶乘是 4 的阶乘的 5 倍,4 的阶乘是 3 的阶乘的 4 倍,依此类推。如果函数被 n = 1
调用,阶乘简单地返回为 1
并且递归可以停止。
将其视为此处运行的实际算法:
关于Python 递归函数 - 这里发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58900399/