第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:15 编辑
进入了啊,返回power(x,y-1),一直在降幂,最后就是2的一次方,就是2,是不是应该是2*power(x,y-1)? 本帖最后由 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: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
吃鲸不放辣 发表于 2020-6-1 22:39
可是我用第一个函数:
>>> def power(x,y):
z=1
你重新看下 我刚刚说了看错了 Twilight6 发表于 2020-6-1 22:15
第一个代码:
若输入的是 x = 2 , y = 3
感谢大佬!!! Twilight6 发表于 2020-6-1 22:40
你重新看下 我刚刚说了看错了
大佬,我还有个问题能帮我解答下么?
以本题为例,在 return Z*power(x,y-1) 时,Python是如何识别 Z 乘的是第一个参数还是第二个参数? 吃鲸不放辣 发表于 2020-6-1 22:51
大佬,我还有个问题能帮我解答下么?
以本题为例,在 return Z*power(x,y-1) 时,Python是如何识别 Z ...
z 不是乘以参数 是乘 power函数的返回值 Twilight6 发表于 2020-6-1 22:53
z 不是乘以参数 是乘 power函数的返回值
感谢大佬,终于明白了 吃鲸不放辣 发表于 2020-6-1 23:10
感谢大佬,终于明白了
没事加油
https://xxx.ilovefishc.com/forum/202005/27/132745rjvcvw1z2148jthd.gif
页:
[1]