鱼C论坛

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

Python 课后习题,22

[复制链接]
发表于 2019-8-31 09:55:33 | 显示全部楼层 |阅读模式

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

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

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


不太能理解红色部分return是如何调用的……

谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-31 09:58:49 | 显示全部楼层
是 x*x*x  一直循环到y == 0?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-31 10:00:13 | 显示全部楼层
假定y=1可以尝试理解一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-31 10:38:16 | 显示全部楼层
假设调用 print(power(2, 1)),x 为 2,y 为 1

1. y 为真,返回 x * power(x, y - 1)
2. 又调用了 power 函数,这时 x 为 2,y 为 0。y 不为真,返回 1。
3. 看第一步,power(x, y - 1) 已经知道是 1,返回 2 * 1 即 2。

你应该能看得懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-31 10:41:16 | 显示全部楼层
    以 power(2 , 3) 为例:

    power(2 , 3):
            return 2 * power(2 , 2)
            return 2 * 2 * power(2 , 1)
            return 2 * 2 * 2 * power(2 , 0)
            return 2 * 2 * 2 * 1
      
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-31 10:49:58 | 显示全部楼层
这是一个迭代函数吧,返回x的y次方
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-31 11:33:42 | 显示全部楼层
facevoid 发表于 2019-8-31 10:49
这是一个迭代函数吧,返回x的y次方

你把我想说的全都说了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-31 11:39:54 | 显示全部楼层
运用的是递归知识
假设x=2,y=3
代码运行过程如下:
def power(2,3):
if y(y=2,y非零,所以可以进行下一步):
      return 3*power(3,2)(再次调用power函数)
if y(y=1,y非零,所以可以进行下一步):
      return 3*3*power(3,0)(再次调用函数)
else:(因为y = 0 ,执行else)
      return 1
print(power(2,3))
每次迭代return  的power()函数python会自动识别调用函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-31 11:44:02 | 显示全部楼层
_2_ 发表于 2019-8-31 11:33
你把我想说的全都说了

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-17 22:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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