![算法零基础一本通(Python版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/51/44510051/b_44510051.jpg)
上QQ阅读APP看书,第一时间看更新
5-5 递归调用与栈运作
本书程序ch1_1.py使用递归调用计算阶乘,笔者输入阶乘数n=3,然后程序第10行调用factorial(n)函数,此时栈内存内容如下:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P72_49971.jpg?sign=1739590501-29fCKQhvRuppGl2UDGox8tNYk6wDBOWV-0-c8dd3467d1e11ed08c6b43e9c106dd80)
接着进入factorial(3)函数,此时程序代码与栈内存内容如下:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P72_49972.jpg?sign=1739590501-nMFqg4u2eR0eToITmd5f2OuL4LwCC2AC-0-2729db0e06dce008e48214096ab24a05)
下列是第2次调用factorial(2)函数,此时程序代码与栈内存内容如下:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P72_49973.jpg?sign=1739590501-k51svmZsoiL4ryTLxvKyNek5d84qLvNA-0-576e3c2c109a16869070d3d790207c29)
下列是第3次调用factorial(1)函数,此时程序代码与栈内存内容如下:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P73_49975.jpg?sign=1739590501-Zp5xFw1dAL4wWKQtGrrHivwVjKkTwzMX-0-e2957d96584a1a7700b3f980790e5955)
下列是返回的操作:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P73_49976.jpg?sign=1739590501-PuHbdHtamBHngQN8rvzAuEUH2DH7LeZF-0-96e6e09081ff0bd441ed7d0d350beed6)
下列是再一次返回的操作:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P73_49977.jpg?sign=1739590501-Kzu0XjttTGwxDeEAqZnzqi7Dx4syNbAI-0-4aa357b0b3da175762c3ba30d4ddf0c2)
所以程序实例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=1739590501-aQvbuHHqooYkBgQwSS0FWnu0FIlZpjmm-0-ed903e2506c29b948fa6964db979bb13)
执行结果
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P74_49979.jpg?sign=1739590501-dP3LGX70P3qlYtxqZO8mUtmtMZknAH0s-0-3529e24297484bf849d52d33e7941f72)