递归的课后练习有疑问
def power(x, y):if y:
return x * power(x, y-1)
else:
return 1
print(power(2,6))
大佬们能详解一下第三行是怎么调用的?
2*2,然后y是怎么算上的? 首先:
执行print(power(2,6))
print函数需要找到power(2,6)的最终返回值,所以进入递归调用
第一次:x=2,y=6, if y:成立,返回2* power(2,5)(遇到power函数的调用,进入下一次)
第二次:x=2,y=5, if y:成立,返回2* power(2,4)(遇到power函数的调用,进入下一次)
第三次:x=2,y=4, if y:成立,返回2* power(2,3)(遇到power函数的调用,进入下一次)
第四次:x=2,y=3, if y:成立,返回2* power(2,2)(遇到power函数的调用,进入下一次)
第五次:x=2,y=2, if y:成立,返回2* power(2,1)(遇到power函数的调用,进入下一次)
第六次:x=2,y=1, if y:成立,返回2* power(2,0)(遇到power函数的调用,进入下一次)
第七次:x=2,y=0, if y:不成立,返回1
回到第六层:返回2*1=2
回到第五层:返回2*2=4
回到第四层:返回2*4=8
回到第三层:返回2*8=16
回到第二层:返回2*16=32
回到第一层:返回2*32=64(最终返回值)
返回给print函数,打印结果为64
就是 自己调用了自己,比如 power(2, 3)
第一次调用:因为y 不等于0或false,if y 即 TRUE,所以 执行 返回 2 * power( 2, 3 -1 ) , 即 2 * power(2, 2) 。
但 power(2, 2) 有等于多少?—— 等于 2 * power(2, 1)
也就是,进行第二调用,返回 2 * power(2, 1)
同理,
第三次调用,则 返回 2 * power(2, 0)而 power(2, 0) 就是最后一次调用。这时 y = 0 , 所以 执行 返回 return 1 ,所以,结果 就是 2 * 1 = 2
好,再倒过来,既然 2 * power(2, 0) = 2, 则 2 * power(2, 1) = 2 * 2 = 4,那 2 * power(2, 2) = 2 * 4 = 8,
那么
power(2, 3) 第一次调用的 要返回的就是 2 * power(2, 2) , 所以 结果 就是 8 。
页:
[1]