【问题标题】:Exponentiation Recursive幂递归
【发布时间】: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


【解决方案1】:

一步一步来:

recPower(3, 2)

n != 0 所以去 else 分支:

factor = recPower(3, 2//2)

这是:

recPower(3, 1)

在这个递归步骤中,n != 0 我们遵循第一个 else 分支,1%2 != 0 所以我们遵循第二个 else 分支。因此,因子为 1,a == 3。

因此这一步的返回值为:

factor * factor * a

1 * 1 * 3

【讨论】:

  • 谢谢,我完全忘记了n 将等于1,并调用后者return。我只是过于关注最初的n 值。
猜你喜欢
  • 2015-11-08
  • 1970-01-01
  • 2018-07-28
  • 2013-09-24
  • 2020-06-11
  • 2019-03-09
  • 2011-05-19
  • 1970-01-01
相关资源
最近更新 更多