- 算法零基础一本通(Python版)
- 洪锦魁
- 267字
- 2022-07-29 15:07:53
5-5 递归调用与栈运作
本书程序ch1_1.py使用递归调用计算阶乘,笔者输入阶乘数n=3,然后程序第10行调用factorial(n)函数,此时栈内存内容如下:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P72_49971.jpg?sign=1739547218-QlAOvo3Ec55fUhZrtZZO6RY4BEczFw98-0-3e9c7adb86f78d28f1ca29c7ba55c230)
接着进入factorial(3)函数,此时程序代码与栈内存内容如下:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P72_49972.jpg?sign=1739547218-qsCsI36MlBCzX1eltl38205Ps3vdiSKd-0-2e8825f6845aa50d5ce8413274163874)
下列是第2次调用factorial(2)函数,此时程序代码与栈内存内容如下:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P72_49973.jpg?sign=1739547218-iukmpWEd5jkrMf4TvC3ptFeaOPLB9OU4-0-89bdeabdd7b51da7284176e7ebf77202)
下列是第3次调用factorial(1)函数,此时程序代码与栈内存内容如下:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P73_49975.jpg?sign=1739547218-BEz3AAcwgssKgfraX1LCIvEv6eYb2IhD-0-f1ca80896e3049c5290a0706ec20ce87)
下列是返回的操作:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P73_49976.jpg?sign=1739547218-D4aWSMSAdl9hzFbFgzhKBmUsvNJtjNgW-0-221cc88caa8a259051237a0aa62328b8)
下列是再一次返回的操作:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P73_49977.jpg?sign=1739547218-unhhTobGd6sL3tooyb0EKCrXDOBrp2JO-0-480828740cfc86b0df5bdb059fa3b96c)
所以程序实例ch1_1.py可以得到6的结果。在算法中有关递归调用与栈的应用仍有许多,本书未来还会有实例说明。
程序实例ch5_5.py:这是ch1_1.py的改良,主要是在factorial( )函数内增加注释,读者可以从此函数看到递归调用的计算过程。
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P74_49978.jpg?sign=1739547218-RVQiTscigEkyHZ8H8oSdx2FTVD48ykox-0-89b777e47d8bd0ea020dd06d7d90dd18)
执行结果
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P74_49979.jpg?sign=1739547218-Aw7D0XpGslHqxZwLspLGSVy2tadTQfcY-0-3e9742f71ed8ad365b0476839ba3b9ab)