鱼C论坛

 找回密码
 立即注册
查看: 963|回复: 4

[已解决]关于递归中的return问题

[复制链接]
发表于 2019-3-14 06:19:57 | 显示全部楼层 |阅读模式

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

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

x
本人新手一枚,学到递归,做到小甲鱼课后练习题时有个疑惑,感谢大佬答疑。
比如用递归解决阶乘问题,如下代码:
def factor(n):
    if n == 1:
        return 1
    else:
        return factor(n-1)*n
num = int(input("Please input an number: "))
print (factor(num))

解决汉诺塔问题如下代码:
def hanoi(n, x, y, z):
    if n == 1:
        print (x, " -->  ", z)
    else:
        hanoi (n-1, x, z, y)
        print (x, " -->  ", z)
        hanoi (n-1, y, x, z)

num = int (input ("Numbers: "))
hanoi(num, "X", "Y", "Z")

我的问题是,为什么在阶乘问题的代码中,少了return,就无法执行。而在汉诺塔问题中,却不能加return (如果第一个 hanoi (n-1, x, z, y)变成 return  hanoi (n-1, x, z, y)),结果就是错的。
最佳答案
2019-3-14 08:46:35
阶乘问题中  需要返回值进行计算,如果没有返回值就无法进行递归计算;
汉诺塔只是个纯递归问题,如果第一个 hanoi (n-1, x, z, y)变成 return  hanoi (n-1, x, z, y),则后面两行代码
print (x, " -->  ", z)
hanoi (n-1, y, x, z)
会直接跳过
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-3-14 08:46:35 | 显示全部楼层    本楼为最佳答案   
阶乘问题中  需要返回值进行计算,如果没有返回值就无法进行递归计算;
汉诺塔只是个纯递归问题,如果第一个 hanoi (n-1, x, z, y)变成 return  hanoi (n-1, x, z, y),则后面两行代码
print (x, " -->  ", z)
hanoi (n-1, y, x, z)
会直接跳过
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-14 08:56:40 | 显示全部楼层
为什么在阶乘问题的代码中,少了return,就无法执行。
因为需要返回值才能继续进行计算

在汉诺塔问题中,却不能加return (如果第一个 hanoi (n-1, x, z, y)变成 return  hanoi (n-1, x, z, y)),结果就是错的。
因为汉诺塔问题只需要print出每一步,这在每次递归的时候就完成了,所以不需要return任何东西
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-14 10:34:12 | 显示全部楼层
maogo 发表于 2019-3-14 08:46
阶乘问题中  需要返回值进行计算,如果没有返回值就无法进行递归计算;
汉诺塔只是个纯递归问题,如果第一 ...

感谢感谢感谢!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-14 10:35:11 | 显示全部楼层
llcourage 发表于 2019-3-14 10:34
感谢感谢感谢!!

感谢感谢感谢!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-11 05:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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