|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
首先,我是这样写的:
>>>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) 并没有进入天下轮递归??感谢!
本帖最后由 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
|
|