我正在学习这种指数递归算法,效果很好。
但我不明白为什么这样有效?
因为如果n
是偶数因为a不会在return
中相乘,我希望始终返回1,1,1 ...
当我尝试recPower(3,2)
,并逐步打印因子时,它将像:
1 3 9
但是,为什么3出来?
def recPower(a, n):
# raises a to the int power n
if n == 0:
return 1
else:
factor = recPower(a, n//2)
if n%2 == 0: # n is even
return factor * factor
else: # n is odd
return factor * factor * a
答案 0 :(得分:0)
一步一步地跟着它:
recPower(3, 2)
n != 0
所以去其他分支:
factor = recPower(3, 2//2)
这是:
recPower(3, 1)
在这个递归步骤n != 0
中,我们遵循第一个其他分支1%2 != 0
,因此我们遵循第二个其他分支。因此因子为1且a
== 3。
因此,此步骤的返回值为:
factor * factor * a
或
1 * 1 * 3