鱼C论坛

 找回密码
 立即注册
查看: 3436|回复: 5

[已解决]递归的返回理解不来

[复制链接]
发表于 2020-2-29 15:08:33 | 显示全部楼层 |阅读模式

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

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

x
def power(x, y):
    if y:
        return x * power(x, y - 1)
    else:
        return 1
print(power(2, 1))
第二次返回的是1,为什么不是打印1,而把return1换成return x为什么是4
最佳答案
2020-2-29 15:23:02
本帖最后由 Hoiste 于 2020-2-29 15:24 编辑

首先进入函数power(2,1),因为if y:里面y = 1,所以执行return x *power(x,y - 1)
接下来分析return x *power(x,y - 1)结果:x = 2,power(x,y-1)的结果需要进一步分析。
power(x, y - 1)代入参数实际是power(2,0)因为y为0,所以执行else的条件下return 1语句,所以返回1
但是这个1是power(2, 0)的结果,也就是power(x,y-1),而不是power(2,1)的,需要回到上一层进行分析
返回的1代入到return x *power(x,y - 1),结果为2,同理,return x的结果按上述思路也是就是4了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-29 15:23:02 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Hoiste 于 2020-2-29 15:24 编辑

首先进入函数power(2,1),因为if y:里面y = 1,所以执行return x *power(x,y - 1)
接下来分析return x *power(x,y - 1)结果:x = 2,power(x,y-1)的结果需要进一步分析。
power(x, y - 1)代入参数实际是power(2,0)因为y为0,所以执行else的条件下return 1语句,所以返回1
但是这个1是power(2, 0)的结果,也就是power(x,y-1),而不是power(2,1)的,需要回到上一层进行分析
返回的1代入到return x *power(x,y - 1),结果为2,同理,return x的结果按上述思路也是就是4了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 15:27:31 | 显示全部楼层
本帖最后由 susan1121 于 2020-2-29 15:28 编辑

你也可以print(1),当时使用print(1),是若因为0,调用函数时函数结果不需要再次打印就出来了,而使用return说明并不想让结果直接显示出来
power(2,1)执行为第一次:2*powe(2,1),第二次:2*(2*power(2,0))=4,其中,power(2,1)=2*power(2,0)=2*1,所以X=4

望采纳
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 15:32:05 | 显示全部楼层
Hoiste 发表于 2020-2-29 15:23
首先进入函数power(2,1),因为if y:里面y = 1,所以执行return x *power(x,y - 1)
接下来分析return x *po ...

理解了,多谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 15:32:36 | 显示全部楼层
susan1121 发表于 2020-2-29 15:27
你也可以print(1),当时使用print(1),是若因为0,调用函数时函数结果不需要再次打印就出来了,而使用retu ...

理解了,多谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 15:37:17 | 显示全部楼层

如果理解请给个最佳答案,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-1 18:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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