有谁能一步一步地向我解释这个阶乘函数是如何打印出这样的输出的吗?我不明白为什么它先打印所有阶乘,然后再打印中间语句,因为第一个n=5与n==1不匹配,所以它将转到else语句并打印出中间语句。在
def factorial(n):
print("factorial has been called with n = " + str(n))
if n == 1:
return 1
else:
res = n * factorial(n-1)
print("intermediate result for ", n, " * factorial(" ,n-1, "): ",res)
return res
print(factorial(5))
factorial has been called with n = 5
factorial has been called with n = 4
factorial has been called with n = 3
factorial has been called with n = 2
factorial has been called with n = 1
intermediate result for 2 * factorial( 1 ): 2
intermediate result for 3 * factorial( 2 ): 6
intermediate result for 4 * factorial( 3 ): 24
intermediate result for 5 * factorial( 4 ): 120
120
您正在使用递归函数计算阶乘值。所以当你得出这个else语句时
控件将再次调用函数“factorial(n-1)”,而不是执行next语句。所以,当它再次调用声明时
^{pr2}$会被打印出来的。在
因为在这个递归函数后面使用了“堆栈”数据结构。因此,每当控件执行函数调用语句时,程序的前一个状态就会被推到堆栈中,并以“后进先出”的方式逐个弹出。这就是输出的原因。在
看看这两个链接。你会更明白的。在
https://www.youtube.com/watch?v=k0bb7UYy0pY
http://www.programmerinterview.com/index.php/recursion/explanation-of-recursion/
实际上,第一次呼叫n=5。所以打印“factorial has called…”,然后不要输入“if n==1”并转到“else”,它首先用局部n=4调用factorial,然后打印“intermediate result…”。factorial的每个调用都将打印这两个,除了最后一个factorial(1)调用,它不执行else语句,因此不打印“中间”的内容。在
相关问题 更多 >
编程相关推荐