鱼C论坛

 找回密码
 立即注册
查看: 3323|回复: 8

[已解决]python函数递归问题

[复制链接]
发表于 2022-11-5 20:58:10 | 显示全部楼层 |阅读模式

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

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

x
1、当输入feb(4)时,代码里面的return是feb(3)+feb(2),也就是返回值为feb(3)+feb(2),这不是没有调用吗,为什么能计算feb(4)呢?
2、视频中说递归在函数体中要有一个结束条件,且每次递归都朝着结束条件靠近,但是这个里面没有限制条件,为什么能够自动停止?
最佳答案
2022-11-5 21:22:17
wangye666 发表于 2022-11-5 21:19
请问第二个问题知道为什么吗,这里不是没有结束条件吗,只有返回值,为什么到feb(1)和feb(2)就不在执行了 ...


        你得明白,什么叫 "递归",函数自己调用自己叫递归,当输入参数 n 大于 2 的时候,feb() 是会继续递归调用自己的,而当 n == 1 或者 n == 2 的时候,函数不再继续递归,开始返回确定的数值,这就是递归到底或者叫递归结束。
37BE283D5F9ED7B782C13A513CC3397A(1).jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-5 21:06:11 | 显示全部楼层

回帖奖励 +6 鱼币

你在return调用函数了,这里return的是函数的返回值
就像return 5*9
它要先计算return后面的值,比如5*9,它要算出45之后才return 45

同理,你这里就是正常的调用函数feb(),会先调用函数,feb返回值之后才return
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-5 21:06:20 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-5 21:26 编辑
def feb(n):
    if n == 1 or n == 2:                   # 如果输入参数 n == 1 或者 n == 2
        return 1                           # 那就返回 1
    else:                                  # 否则(n > 2)
        return feb(n - 1) + feb(n - 2)     # 用减小的输入参数,继续递归
        1、feb(4) = feb(3) + feb(2) = feb(2)  + feb(1) + feb(2) = 1 + 1 + 1 = 3

        2、当 n == 1 和 n == 2 时,feb(n) 有确定的值 1,而没有继续调用 feb(n - 1) 和 feb(n - 2),这就是递归的结束条件。feb(n - 1) + feb(n - 2) 就是在逐步向结束条件(n == 1 or n == 2)靠近。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-5 21:07:29 | 显示全部楼层
fcage 发表于 2022-11-5 21:06
你在return调用函数了,这里return的是函数的返回值
就像return 5*9
它要先计算return后面的值,比如5*9 ...

请问第二个问题为什么知道吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-5 21:08:41 | 显示全部楼层
返回值为 feb(3) + feb(2) 的 时候 , 它还是 feb 函数里 , 又要去看:
feb(3) == feb(2) + feb(1) == 1 + 1 == 2
feb(2) == 1
然后再返回来 , feb(4) == 2 + 1 == 3

这里的限制条件就是 当 n == 1 或 n == 2 时 , 返回 1
可以看出 , 当输入任意一个大于1 的整数最后减着减着早晚会到 1 或者 2 , 从而返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-5 21:13:13 | 显示全部楼层
柿子饼同学 发表于 2022-11-5 21:08
返回值为 feb(3) + feb(2) 的 时候 , 它还是 feb 函数里 , 又要去看:
feb(3) == feb(2) + feb(1) == 1 + 1 ...

请问第二个问题知道为什么吗,这里不是没有结束条件吗,只有返回值,为什么到feb(1)和feb(2)就不在执行了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-5 21:19:01 | 显示全部楼层
jackz007 发表于 2022-11-5 21:06
1、feb(4) = feb(3) + feb(2) = feb(2)  + feb(1) + feb(2) = 1 + 1 + 1 = 3

        2、当 n = ...

请问第二个问题知道为什么吗,这里不是没有结束条件吗,只有返回值,为什么到feb(1)和feb(2)就不在执行了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-5 21:22:17 | 显示全部楼层    本楼为最佳答案   
wangye666 发表于 2022-11-5 21:19
请问第二个问题知道为什么吗,这里不是没有结束条件吗,只有返回值,为什么到feb(1)和feb(2)就不在执行了 ...


        你得明白,什么叫 "递归",函数自己调用自己叫递归,当输入参数 n 大于 2 的时候,feb() 是会继续递归调用自己的,而当 n == 1 或者 n == 2 的时候,函数不再继续递归,开始返回确定的数值,这就是递归到底或者叫递归结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-5 21:29:53 | 显示全部楼层
wangye666 发表于 2022-11-5 21:13
请问第二个问题知道为什么吗,这里不是没有结束条件吗,只有返回值,为什么到feb(1)和feb(2)就不在执行了 ...

你看看 , 到 1 或 2 的时候 , 就返回去 了 , 就 return 了
所以到这就回来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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