吃鲸不放辣 发表于 2020-6-1 22:08:22

第22讲 动动手第一题

首先,我是这样写的:
>>>def power(x,y):
        z=1
        z*=x
        if y==1:
                return z
        else:
                return power(x,y-1)

>>> power(2,3)
2

然后改为:
>>>def power(x,y):
        z=x
        if y==1:
                return z
        else:
                return z*power(x,y-1)
>>> power(2,3)
8

请大神指点为什么 第一个方法 return power(x,y-1) 并没有进入天下轮递归??感谢!




java2python 发表于 2020-6-1 22:14:44

本帖最后由 java2python 于 2020-6-1 22:15 编辑

进入了啊,返回power(x,y-1),一直在降幂,最后就是2的一次方,就是2,是不是应该是2*power(x,y-1)?

Twilight6 发表于 2020-6-1 22:15:28

本帖最后由 Twilight6 于 2020-6-1 22:33 编辑

第一个代码:

若输入的是 x = 2 , y = 3

第一次 1 赋值给 z,z*=x 则 z = 2 ; y 不等于 1 所以运行 else 下的代码 进入第一次递归 power(2,3-1)此时 z = 2

power(2,2) --> 执行 z 再次赋值为 1,z*=x 使得 z 还是等于 2 ,因为 y 不等于 1 所以还是 进入 else 下的代码块 进入第二次递归 power(2,2-1)此时 z = 2

power(2,1) --> z 再次赋值为 1,z*=x 使得 z 还等于 2因为 y 等于 1 则进入 if 的代码块,此时 z = 2 返回 z

power(2,1) 返回的值 返回给 power(2,2) ,然后 power(2,2) 返回给power(2,3)最后返回 power(2,3) 即为 只返回 z 则结果为 2



第二个代码:

若输入的是 x = 2 , y = 3

第一次 x赋值给 z ; y 不等于 1 所以运行 else 下的代码 进入第一次递归 power(2,3-1)此时 z = 2

power(2,2) --> 执行 因为 y 不等于 1 所以还是 进入 else 下的代码块 进入第二次递归 power(2,2-1)此时 z = 2

power(2,1) --> 执行 因为 y 等于 1 则进入 if 的代码块,此时 z = 2 返回 z

power(2,1) 返回的值 返回给 power(2,2) ,然后 z*power(2,2) 返回给power(2,3)最后返回 z * power(2,3) 即为 z*z*z = 8

Twilight6 发表于 2020-6-1 22:34:43

第一次看错了 哈哈写错了 ,现在重新编辑了

吃鲸不放辣 发表于 2020-6-1 22:39:08

Twilight6 发表于 2020-6-1 22:15
第一个代码:

若输入的是 x = 2 , y = 3


可是我用第一个函数:
>>> def power(x,y):
      z=1
      z*=x
      if y==1:
                return z
      else:
                return power(x,y-1)

      
>>> power(2,3)
2

Python的返回值是2啊,不是8

Twilight6 发表于 2020-6-1 22:40:50

吃鲸不放辣 发表于 2020-6-1 22:39
可是我用第一个函数:
>>> def power(x,y):
      z=1


你重新看下 我刚刚说了看错了

吃鲸不放辣 发表于 2020-6-1 22:42:21

Twilight6 发表于 2020-6-1 22:15
第一个代码:

若输入的是 x = 2 , y = 3


感谢大佬!!!

吃鲸不放辣 发表于 2020-6-1 22:51:59

Twilight6 发表于 2020-6-1 22:40
你重新看下 我刚刚说了看错了

大佬,我还有个问题能帮我解答下么?
   以本题为例,在 return Z*power(x,y-1) 时,Python是如何识别 Z 乘的是第一个参数还是第二个参数?

Twilight6 发表于 2020-6-1 22:53:44

吃鲸不放辣 发表于 2020-6-1 22:51
大佬,我还有个问题能帮我解答下么?
   以本题为例,在 return Z*power(x,y-1) 时,Python是如何识别 Z ...

z 不是乘以参数 是乘 power函数的返回值

吃鲸不放辣 发表于 2020-6-1 23:10:39

Twilight6 发表于 2020-6-1 22:53
z 不是乘以参数 是乘 power函数的返回值

感谢大佬,终于明白了

Twilight6 发表于 2020-6-1 23:11:46

吃鲸不放辣 发表于 2020-6-1 23:10
感谢大佬,终于明白了

没事加油
https://xxx.ilovefishc.com/forum/202005/27/132745rjvcvw1z2148jthd.gif
页: [1]
查看完整版本: 第22讲 动动手第一题