鱼C论坛

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

[已解决]022讲 递归函数疑问

[复制链接]
发表于 2018-6-8 01:05:42 | 显示全部楼层 |阅读模式

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

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

x
0 power(x,y)计算x的y次幂的值:
def power(x,y):
     if y:
         return x * power(x,y-1)
     else:
         return 1
print(power(2,3))

疑问:请问x*power(x,y-1)是如何算出的x的y次幂的?以及else:后面的return 1 是什么意思?

我的理解为:return中x * power(x,y-1)是x*x直至y的数为0位置,这个是根据数学常识x的y次幂即为y个x相成,但是在这里是怎么运行的就不清楚了。
另外return 1 是什么意思就不清楚了。这个1参数上面相乘吗?
最佳答案
2018-6-8 06:43:25
举个例子,执行power(2,3)
第一次进入函数,y==3, return 2*power(2,2)
第二次进入函数,y==2, return 2*power(2,1)
第三次进入函数,y==1, return 2*power(2,0)
第四次进入函数,y==0, return 1
返回到第三次,return 2*1
返回到第二次,return 2*(2*1)
返回到第一次,return 2*(2*(2*1))
所以最终返回了2*2*2
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-6-8 06:43:25 | 显示全部楼层    本楼为最佳答案   
举个例子,执行power(2,3)
第一次进入函数,y==3, return 2*power(2,2)
第二次进入函数,y==2, return 2*power(2,1)
第三次进入函数,y==1, return 2*power(2,0)
第四次进入函数,y==0, return 1
返回到第三次,return 2*1
返回到第二次,return 2*(2*1)
返回到第一次,return 2*(2*(2*1))
所以最终返回了2*2*2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-8 07:17:29 | 显示全部楼层
你都理解差不多了,if-else却还没理解
y非0时执行if,变成0时执行else,

递归到最后总要有个头,不然不无限循环了
这里else就是x的指数为0的情况
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-8 07:43:36 | 显示全部楼层
if的条件为0则为假,其他为真
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-6-8 07:52:22 | 显示全部楼层
y如果不是0的话为True,所以如果是false(也就是0),那么就返回0的阶乘等于1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-8 09:37:22 | 显示全部楼层
只要y不等于0,那么一直返回x * power(x, y-1),直到y=0了,返回1。

那么power(2,3)的过程就是:
power(2,3)
=2*power(2,2)
=2*2*power(2*1)
=2*2*2*power(2*0)
=2*2*2*1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2018-6-8 23:11:02 | 显示全部楼层
BngThea 发表于 2018-6-8 06:43
举个例子,执行power(2,3)
第一次进入函数,y==3, return 2*power(2,2)
第二次进入函数,y==2, return 2* ...

我理解了:
将(2,3)代入函数
可以理解为:
return (2*power(2,2))=(2*2*power(2,1))=(2*2*2*power(2,0))=(2*2*2*1)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-8 23:15:09 | 显示全部楼层
allen-xy 发表于 2018-6-8 09:37
只要y不等于0,那么一直返回x * power(x, y-1),直到y=0了,返回1。

那么power(2,3)的过程就是:

我当时有点乱
原因是:只记得if条件为真即要执行if缩进的内容。可是这个是递归函数,return本身就带循环执行power这个函数,这也就无形之中是的if有了while的循环功能。还有一个就是并没有理解return x * power(x,y-1)含义,就像你写出来的,这个就是(2*power(2,2))=》(2*2*power(2,1))=》(2*2*2*power(2,0))=》(2*2*2*1)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-11 22:03:27 | 显示全部楼层
allen-xy 发表于 2018-6-8 09:37
只要y不等于0,那么一直返回x * power(x, y-1),直到y=0了,返回1。

那么power(2,3)的过程就是:

明白啦,谢谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 02:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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