Python 幂递归
我正在学习这个指数递归算法,它工作得很好。 但我不明白为什么会这样?Python 幂递归,python,python-3.x,computer-science,Python,Python 3.x,Computer Science,我正在学习这个指数递归算法,它工作得很好。 但我不明白为什么会这样? 因为我希望它总是返回1,1,1…如果n是偶数,因为a在返回中不相乘 当我尝试recPower(3,2)并一步一步地打印因子时,它将如下所示: 一, 3. 九, 但是,为什么3会出现呢 def recPower(a, n): # raises a to the int power n if n == 0: return 1 else: factor = recPower
因为我希望它总是返回1,1,1…如果
n
是偶数,因为a在返回中不相乘
当我尝试recPower(3,2)
并一步一步地打印因子时,它将如下所示:
一,
3.
九,
但是,为什么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
只要循序渐进:
recPower(3, 2)
n!=0
因此请转到else分支:
factor = recPower(3, 2//2)
即:
recPower(3, 1)
在这个递归步骤中n!=0
我们遵循第一个其他分支,1%2!=0
因此我们遵循第二个else分支。因此,系数为1,a
==3
因此,此步骤的返回值为:
factor * factor * a
或
3之所以存在,是因为1*1*3==3您的算法正好实现了这一点:a**(2*n)=(a**n)*(a**n)
,a**(2*n+1)=(a**n)*(a**n)*a
。你到底不明白什么?“因为a在回报中不相乘”取决于你的确切意思,我会说它在底部回报中相乘:returnfactor*factor*a
。谢谢,我知道了。当n==1时,它返回“a”。我只是认为当初始n开始时,即使是偶数,它也不会返回“a”。谢谢,我完全忘记了n
将等于1,并调用后者return
。我只是把太多的注意力放在了初始的n
值上。
1 * 1 * 3