鱼C论坛

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

[已解决]作业中遇到的问题

[复制链接]
发表于 2018-4-11 23:01:17 | 显示全部楼层 |阅读模式

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

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

x
def power(x, y):
    if y:
        return x * power(x, y-1)
    else:
        return 1
   
print(power(2, 4))
当中的,  return x * power(x, y-1),需要如何理解呀,我有点不明白,望指教,谢谢了
最佳答案
2018-4-12 09:34:56
hi

这个属于递归函数(调用函数自身)。以powe(2,3)为例(计算2的3次方),说明下过程

  1. def power(x, y):
  2.     if y:
  3.         return x * power(x, y-1)
  4.     else:
  5.         return 1

  6. 1. power(2,3) #x=2,y=3

  7. y>0 , return x * power(x, y-1), 即  return 2 * power(2,2)


  8. 2. 下面计算 power(2,2) #x=2,y=2

  9. y>0 , return x * power(x, y-1), 即  return 2 * power(2,1)

  10. 3. 下面计算 power(2,1) #x=2,y=1

  11. y>0 , return x * power(x, y-1), 即  return 2 * power(2,0)

  12. 4. 下面计算 power(2,0) #x=2,y=0

  13. y=0,执行else分支,即 返回 1


  14. 5. 也就是说: power(2,3) = 2 * power(2,2) = 2 * 2 * power(2,1) = 2*2*2 * power(2,0)=2*2*2*1


  15. 最后需要注意,使用递归函数时,一定要注意 递归、递归,一定要归来(如:例子中的else:  return 1),否则就会陷入无限循环,导致崩溃
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-11 23:13:16 | 显示全部楼层
power(x, y-1)算出x的y-1次幂,再乘x就是x的y次幂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-11 23:26:07 | 显示全部楼层
塔利班 发表于 2018-4-11 23:13
power(x, y-1)算出x的y-1次幂,再乘x就是x的y次幂

return x * power(x, y-1),能否告诉我power(2,4)的演变过程,或者是我对power(x,y-1)的理解有误?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-12 09:34:56 | 显示全部楼层    本楼为最佳答案   
hi

这个属于递归函数(调用函数自身)。以powe(2,3)为例(计算2的3次方),说明下过程

  1. def power(x, y):
  2.     if y:
  3.         return x * power(x, y-1)
  4.     else:
  5.         return 1

  6. 1. power(2,3) #x=2,y=3

  7. y>0 , return x * power(x, y-1), 即  return 2 * power(2,2)


  8. 2. 下面计算 power(2,2) #x=2,y=2

  9. y>0 , return x * power(x, y-1), 即  return 2 * power(2,1)

  10. 3. 下面计算 power(2,1) #x=2,y=1

  11. y>0 , return x * power(x, y-1), 即  return 2 * power(2,0)

  12. 4. 下面计算 power(2,0) #x=2,y=0

  13. y=0,执行else分支,即 返回 1


  14. 5. 也就是说: power(2,3) = 2 * power(2,2) = 2 * 2 * power(2,1) = 2*2*2 * power(2,0)=2*2*2*1


  15. 最后需要注意,使用递归函数时,一定要注意 递归、递归,一定要归来(如:例子中的else:  return 1),否则就会陷入无限循环,导致崩溃
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-12 16:47:49 | 显示全部楼层
非常感谢,解释的很清晰,感觉比小甲鱼讲的递归要好呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-13 09:19:26 | 显示全部楼层
aicuimail 发表于 2018-4-12 16:47
非常感谢,解释的很清晰,感觉比小甲鱼讲的递归要好呢

我晕,和小甲鱼老师比起来,我最多是个点.
彼此加油吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 14:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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