鱼C论坛

 找回密码
 立即注册
查看: 1553|回复: 7

[已解决]递归

[复制链接]
发表于 2017-7-26 15:15:29 | 显示全部楼层 |阅读模式

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

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

x
#p6_8.py
def fab(n):
    if n<1:
        print("输入有误!")
        return -1
    else:
        return fab(n-1)+fab(n-2)

result = fab(20)
if result!=-1:
print(‘总共有%d对小兔崽子诞生!’% result)

作为python小白,谁能把这段递归代码给讲清楚点??
最佳答案
2017-7-26 18:16:47
本帖最后由 ba21 于 2017-7-26 18:19 编辑

画了个图,走了下流程。仔细看一遍应该能明白。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-26 15:38:32 | 显示全部楼层
本帖最后由 yongxi 于 2017-7-26 15:41 编辑

递归的两大要素:
一:设置递归条件。
二:设置停止条件。


if n<1:
        print("输入有误!")
        return -1
这是递归的停止条件,如果n小于1了,那么就打印 "输入有误!"并返回-1


else:
        return fab(n-1)+fab(n-2)
这是递归的条件,fab(20)第一层就是 return fab(19)+fba(18)
第二层就是 return fab(18)+fab(17)+fab(17)+fab(16)
继续下去。。
fab(18) = fab(17)+fab(16)
fab(16) = fab(15)+fab(14)
一直一直~~
直到fab(2) = fab(1) + fab(0)
fab(0)  因为0小于1 因此返回 -1
fab(1) = fab(0) + fab(-1) = -1 + -1 = -2

你这个代码执行的最后就是17711个 -1相加

执行的最后结果就是打印17711行 "输入有误!"
result = -17711

因此,如果这个代码是解答小甲鱼老师求小兔子数量的话,那么就是错误的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-26 15:46:55 | 显示全部楼层
具体的解释yongxi说的很详细了。递归实际上是把复杂问题简单化。这里就是第n个值等于第n-1和n-2的值的和,以此类推,直至第一个和第二个(这两个的值为1)。
你的程序有误。我修改了一下。
  1. def fab(n):
  2.     if n<1:
  3.         print("输入有误!")
  4.         return -1
  5.     if n<=2:
  6.         return 1
  7.     else:
  8.         return fab(n-1)+fab(n-2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-26 16:20:10 | 显示全部楼层
冬雪雪冬 发表于 2017-7-26 15:46
具体的解释yongxi说的很详细了。递归实际上是把复杂问题简单化。这里就是第n个值等于第n-1和n-2的值的和, ...

哦。。是我表述的问题,其实这段代码是为了解决兔子繁殖的问题,本人数学较差。原问题是,兔子在出生两个月后,就有繁殖能力,在拥有繁殖能力之后,这对兔子每个月能生出一对小兔子来。假如所有的兔子都不会死去,能够一直繁殖下去,那么一年后可以繁殖多少对?用数学函数定义的是F(n)=1,当n=1时/1,当n=2时/F(n-1)+F(n-2),当n>2时。我就想问这个函数怎么解释.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-26 18:16:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 ba21 于 2017-7-26 18:19 编辑

画了个图,走了下流程。仔细看一遍应该能明白。
2017-07-26_181318.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-27 13:32:49 | 显示全部楼层
ba21 发表于 2017-7-26 18:16
画了个图,走了下流程。仔细看一遍应该能明白。

感谢如此费心的解释,只是,我还是不明白每个函数对应的是那一对兔子的繁殖情况啊,我不理解的是为什么这个繁殖情况能用这个函数来表示.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-27 13:45:45 | 显示全部楼层
风之子巴萨 发表于 2017-7-27 13:32
感谢如此费心的解释,只是,我还是不明白每个函数对应的是那一对兔子的繁殖情况啊,我不理解的是为什么这 ...

哪只能是找几个妹子来繁殖下才知道了。
给你解释递归原理,原理懂了还有能不懂的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-27 14:37:42 | 显示全部楼层
ba21 发表于 2017-7-27 13:45
哪只能是找几个妹子来繁殖下才知道了。
给你解释递归原理,原理懂了还有能不懂的?

你说的好有道理,我竟无言以对...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 20:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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