鱼C论坛

 找回密码
 立即注册
查看: 1333|回复: 6

[已解决]一个关于递归的问题,请教各位鱼友

[复制链接]
发表于 2017-11-6 15:39:23 | 显示全部楼层 |阅读模式

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

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

x
def fib(n):
    if n==1 or n==0:
        return 1
    else:
        a=fib(n-1)
        b=fib(n-2)
        c=a+b
        return c
当n=4 的时候 为什么c是等于5;
return 在这个函数中起到了什么作用。
程序开始执行的过程是先递归 fib(a) 一直递归到 a=fib(1)=1;再接着递归 fib(b) 一直到b=fib(0)=1
那为啥接下来算c=a+b 不就直接等于1+1=2了吗?为什么结果会是5呢?
最佳答案
2017-11-6 15:52:27
本帖最后由 chakyam 于 2017-11-6 15:57 编辑

f4
=f3+f2
=(f2+f1)+(f1+f0)
=((f0+f1)+f1)+(f1+f0)
=3f1+2f0
=5

补个图
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-6 15:52:27 | 显示全部楼层    本楼为最佳答案   
本帖最后由 chakyam 于 2017-11-6 15:57 编辑

f4
=f3+f2
=(f2+f1)+(f1+f0)
=((f0+f1)+f1)+(f1+f0)
=3f1+2f0
=5

补个图
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-11-6 15:57:24 | 显示全部楼层
chakyam 发表于 2017-11-6 15:52
f4
=f3+f2
=(f2+f1)+(f1+f0)

可是计算机程序在执行这段代码的过程中 是先将a=fib(n-1) 递归结束啊,然后再执行b=fib(n-2)啊。并不是直接算fib(4)=fib(3)+fib(2).如果按照计算机代码一步步的执行下来,我依旧想不明白为啥 c=5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-6 15:59:55 | 显示全部楼层
chakyam 发表于 2017-11-6 15:52
f4
=f3+f2
=(f2+f1)+(f1+f0)

这张图思考的方向是人来算这段代码,并不是计算机执行代码的过程 ,按照计算机执行代码的顺序 我==不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-6 16:18:52 | 显示全部楼层
chakyam 发表于 2017-11-6 15:52
f4
=f3+f2
=(f2+f1)+(f1+f0)

谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-6 19:46:55 | 显示全部楼层
递归啊.jpg

拿走不谢

以后递归都可以采用类似的办法进行考虑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-11-18 17:30:44 | 显示全部楼层
Teagle 发表于 2017-11-6 19:46
拿走不谢

以后递归都可以采用类似的办法进行考虑

谢谢谢谢,一直没看到。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 14:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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