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

时间:2013-06-21 16:04:51

标签: algorithm recursion complexity-theory

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

  1. 我很困惑,看起来每个问题都被分成一个子问题,每个问题大小为2,因此它不会形成树,因为通常对于递归“树”,你需要两个递归调用。只有一个递归调用就像一个简单的列表。但它是一个递归函数,Factorial和许多其他递归函数形成树,它们的递归看起来相同。
  2. 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
    

2 个答案:

答案 0 :(得分: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 是权力。

答案 1 :(得分:1)

是的,它正在创建一个隐藏的树,它只横过一条路径