递归递归

时间:2016-10-11 02:42:49

标签: python python-3.x computer-science

我正在学习这种指数递归算法,效果很好。 但我不明白为什么这样有效? 因为如果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

1 个答案:

答案 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