鱼C论坛

 找回密码
 立即注册
查看: 1876|回复: 5

[已解决]请问阶乘代码在电脑中的运行流程

[复制链接]
发表于 2018-4-20 10:53:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def factorial(n):
    if n == 1:     
        return 1
    else:
        return  n *factorial(n-1)

factorial(3)的运行过程
首先调用def factorial(3),n>1时,返回调用def factorial(n-1),第一步和第二步均调用了两个不同的函数,第三步当n=1时,只调用了函数def factorial(n):
第一步:由于n>1,return  3 *factorial(3-1)
第二步:调用factorial(2),由于n>1,return 2*factorial(2-1)
第三部:调用factorial(1),由于n=1,return 1
第四部:返回到第一步?即return  3 *2*1=6

新手请教,电脑运行过程是这样的吗?
最佳答案
2018-4-20 11:26:26
递归调用时,python会用调用栈来储存未完成的调用。所以返回1之后,会完成fac(2)的调用,返回fac(2)的结果后才能完成fac(3)的调用得到结果。你可以在网易云课堂上找到可汗学院的python讲解视频,里面很详细的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-4-20 10:58:44 | 显示全部楼层
进入递归的前面三步是对的
但是返回的时候是从factorial(1)返回到第二步factorial(2),再返回到第一步factorial(3)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-20 11:26:26 | 显示全部楼层    本楼为最佳答案   
递归调用时,python会用调用栈来储存未完成的调用。所以返回1之后,会完成fac(2)的调用,返回fac(2)的结果后才能完成fac(3)的调用得到结果。你可以在网易云课堂上找到可汗学院的python讲解视频,里面很详细的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-20 11:26:28 | 显示全部楼层
int fac=1;
if(!num)
{
fac=1;
}
else
{
   int tmp=nNum;
    while(tmp)
    {
        fac*=tmp;
         tmp--;
    }
}

提供一种阶乘的实现思路
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-20 11:26:30 | 显示全部楼层
BngThea 发表于 2018-4-20 10:58
进入递归的前面三步是对的
但是返回的时候是从factorial(1)返回到第二步factorial(2),再返回到第一步fact ...

谢谢,还是不太明白return为什么是factorial(1)返回到第二步factorial(2),再返回到第一步factorial(3)
从运行看,
1.factorial(3)...........return  3*factorial(2)
2.factorial(2)...........return  2*factorial(1)
3.factorial(1)...........return  factorial(1)=1

这样看return是先从factorial(2) return factorial(1)的啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-20 11:31:40 | 显示全部楼层
cympsy 发表于 2018-4-20 11:26
谢谢,还是不太明白return为什么是factorial(1)返回到第二步factorial(2),再返回到第一步factorial(3)
...

需要理解一个重要的递归逻辑:
当你代码执行到进入递归的时候,后面的代码会暂时挂起,不执行,等到递归返回的时间继续执行后面的操作
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-2 00:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表