鱼C论坛

 找回密码
 立即注册
查看: 1991|回复: 3

[已解决]第23课:递归,算年龄

[复制链接]
发表于 2021-1-14 14:19:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Peteryo01223 于 2021-1-14 14:22 编辑

题目:
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

我的尝试和注释,如下:
def function(a, b, c): # 三个变量,即:第5个人的年龄、总人数、每次的年龄差。
    if (b-1) > 0: # 循环次数,限于(总人数-1)次
        a = a+ c # 每次都是,第5个人的年龄 + 固定年龄差。
        b -= 1 # 循环一次,就减少一人。
        return function(a, b, c) # 进入递归模式
    else:
        return 0 # 其他情况,则跳出循环
print(function(10, 5, 2))

问题:
以上尝试,没报错,但打印结果错误。
请问,可否尽量按照我的思路,予以针对性指正。谢谢高人们!

最佳答案
2021-1-14 14:26:02
def function(a, b, c): # 三个变量,即:第5个人的年龄、总人数、每次的年龄差。
    if (b-1) > 0: # 循环次数,限于(总人数-1)次
        a = a+ c # 每次都是,第5个人的年龄 + 固定年龄差。
        b -= 1 # 循环一次,就减少一人。
        return function(a, b, c) # 进入递归模式
    else:
        return a # return改成a就好了吧
print(function(10, 5, 2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-14 14:26:02 | 显示全部楼层    本楼为最佳答案   
def function(a, b, c): # 三个变量,即:第5个人的年龄、总人数、每次的年龄差。
    if (b-1) > 0: # 循环次数,限于(总人数-1)次
        a = a+ c # 每次都是,第5个人的年龄 + 固定年龄差。
        b -= 1 # 循环一次,就减少一人。
        return function(a, b, c) # 进入递归模式
    else:
        return a # return改成a就好了吧
print(function(10, 5, 2))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-14 14:28:59 | 显示全部楼层

一字师,谢谢!return 什么,其实我很费解,有时候是 0,有时候是 1,有时候是 function 本身。怎么定 return 内容呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-14 14:31:13 | 显示全部楼层
Peteryo01223 发表于 2021-1-14 14:28
一字师,谢谢!return 什么,其实我很费解,有时候是 0,有时候是 1,有时候是 function 本身。怎么定 re ...

看你需要什么呀
因为你这个是对年龄的递归叠加
所以递归到最后返回的应该是初始年龄(最后一个人的年龄)
这样每一层返回计算一个年龄差
到最前面不就是你想要的结果吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 11:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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