algorithm - 我对幂函数中的递归感到困惑

标签 algorithm recursion complexity-theory

以下是获得权力的代码(数学)。

  1. > 我很困惑,看起来每个问题都被分成一个子问题,每个子问题的大小都是两个,所以它没有形成一棵树,因为通常对于递归“树”你需要两次递归调用。只有一次递归调用,它就像一个简单的列表。 .但它是一个递归函数,阶乘和许多其他递归函数形成树,它们的递归看起来是一样的。

2.如果是一棵树,那么它是遍历所有路径还是单条路径?

     public int GetPower(int k, int n)
     {
     if (n == 0)
     {
      return 1;
     }
     else {
         int t = GetPower(k, n / 2);
          if((n%2)==0)
          {
            return t*t;                
           }
          else{
            return k*t*t;  
           }
         }
     }

请帮助我,我的困惑需要一些解释。

编辑

              (2,20)    ->    (2,10)  ->     (2,5)  ->    (2,2)   ->  (2,1)  ->   (2,0)
    1048576 <- 1024     <-     32     <-     2^4*2  <-      2*2   <-    2    <-     1

最佳答案

当您想计算 GetPower(2,6) 时,您需要 2^6 的答案。想象一下,如果您得到 2^3 的答案是 8,您会很高兴。现在您只需乘以 2^3 * 2^3 =8*8=64。

这是使用的逻辑。

对于奇数幂,例如:

2^5

我们计算 2^2 的答案并执行:

2 * 2^2 * 2^2

非常简单的技巧,但将时间复杂度从 O(N) 更改为 O(log N),其中 N 是幂。

关于algorithm - 我对幂函数中的递归感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239655/

相关文章:

algorithm - 什么类型的算法用于多路径但一个起点的寻路?

regex - 在golang中用零替换数字

有返回语句和没有返回语句的 Javascript 递归

C 有向图实现选择

c++ - 解释为什么这个未简化的复杂性表达式是这样的?

ruby - 如何在 Ruby 中生成成对距离数组?

algorithm - 如何使用 Opencv 存储大量图像的分层 K-Means 树?

sql - * 和显式字段列表的结果不同?

python - 调用 super 的 init 时 Python 中的最大递归深度错误。

algorithm - 如何找到所有的兄弟情谊字符串?