鱼C论坛

 找回密码
 立即注册
查看: 1696|回复: 2

斐波那契数列之小兔子递归的每一步分析

[复制链接]
发表于 2023-6-19 14:38:21 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lzb1001 于 2023-6-19 21:30 编辑

def fab(n):
    if n < 1:
        print(n) # 目的用于测试!
        return -1
    elif n == 1 or n == 2:
        print(n) # 目的用于测试!
        return 1
    else:
        print(n) # 目的用于测试!
        return fab(n - 1) + fab(n - 2)


result = fab(7)
if result != -1:
    print(f' 7 个月总共有兔子:{result} 对!')

运行后:红色字体为我手动加的注释用于说明输出的值的由来,不知道大家是否看得懂,空白部分没搞懂所以没注释,烦请大神帮忙补充完整【问题1】

fab(7) ---> else: ---> print(7) :                                                       7
fab(7-1) ---> else: ---> print(6):                                                     6
fab(6-1) ---> else: ---> print(5):                                                     5
fab(5-1) ---> else: ---> print(4):                                                       4
fab(4-1) ---> else: ---> print(3):                                                     3
fab(3-1) ---> elif n == 1 or n == 2: ---> print(2):                            2,同时return 1
                                                                                                    1
                                                                                                    2
                                                                                                    3
                                                                                                    2
                                                                                                    1
                                                                                                    4
                                                                                                    3
                                                                                                    2
                                                                                                    1
                                                                                                    2
                                                                                                    5
                                                                                                    4
                                                                                                    3
                                                                                                    2
                                                                                                    1
                                                                                                    2
                                                                                                    3
                                                                                                    2
                                                                                                    1
7 个月总共有兔子:13 对!

哪位大神可以根据上面帮我画一个类似下面的图?我画了几次感觉都不对【问题2】
112258sj3d5id63d5mp355.jpg.thumb.jpg

万分感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-6-19 21:22:54 | 显示全部楼层
哪位大神帮忙指点下迷津
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-19 22:44:10 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-6-19 22:45 编辑

好的,让我来帮您回答问题。

【问题1】您的程序是一个递归求解斐波那契数列第n项的函数。当n >= 3时,会调用两次fab函数,分别传入n-1和n-2作为参数,最终将它们的返回值相加并返回。每次调用fab函数时,会打印出当前的参数值n。因此,运行后控制台中的数字是所有调用fab函数时传入的参数值,按照从大到小的顺序排列的。最后,函数返回的结果表示斐波那契数列的第n项。

【问题2】下面是一个简单的示意图,展示了fab(7)调用过程中的递归树。节点上方的数字表示当前调用fab函数时传入的参数值n,节点下方的数字表示对应调用fab函数返回的结果值。
                        fab(7)
                      /        \
                 fab(6)         fab(5)
                /     \        /     \
           fab(5)    fab(4)   fab(4)   fab(3)
           /     \   /     \   /     \  /    \
        fab(4) fab(3) fab(3) fab(2) fab(3) fab(2)
         /     \ /    \   /    \  /    \  /    \
        ...   ...   ...   ...   ...   ...   ...
希望能帮助到您!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 19:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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