Python阶乘递归函数



谁能逐步向我解释此阶乘功能如何打印出这种输出?我不明白为什么它要打印所有阶乘,然后按照中间语句遵循,因为第一个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:
    res = n * factorial(n-1)

控件将再次调用函数" castorial(n-1)",而不是执行下一个语句。因此,当它再次称为语句时,

print("factorial has been called with n = " + str(n))

将被打印。

由于"堆栈"数据结构在此递归函数背后使用。因此,每当控件用于函数调用语句时,该程序的先前状态将被推到堆栈中,并以" LIFO"方式一个一个一个。这就是为什么输出的原因。

请参阅这两个链接。您会更好地理解它。

https://www.youtube.com/watch?v=k0bb7uyy0py

http://www.programmerinternview.com/index.php/recursion/explanation-of-ercursion/

的确,第一次呼叫中的n = 5。因此,您打印"句子被称为...",然后不要输入"如果n == 1",然后转到" else",该效率首先使用本地n = 4,然后打印后"中间结果"。.."。除最后一个castorial(1)呼叫(未执行erse语句)外,阶乘的每个呼叫都预计将打印这两个句子,因此不会打印"中间"的东西。

最新更新