【发布时间】:2016-10-11 02:42:48
【问题描述】:
我正在学习这个指数递归算法,它运行良好。
但我不明白为什么这有效?
因为我希望它总是返回 1,1,1...如果 n 是偶数,因为 a 不会在 return 中相乘。
当我尝试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
【问题讨论】:
-
3 存在是因为 1*1*3 == 3
-
您的算法正是这样实现的:
a**(2*n) = (a**n) * (a**n),a**(2*n+1) = (a**n) * (a**n) * a。你到底有什么不明白的? -
"因为 a 不会在返回中相乘" 根据您的确切意思,我会说它在底部返回中:
return factor * factor * a。 -
谢谢,我明白了。当 n == 1 时它返回 'a'。我只是认为当初始 n 甚至开始时,它永远不会返回 'a'。
标签: python python-3.x computer-science