關於遞歸算法x(x(8))需要調用幾次函數x(int n)

好久沒有寫博客了~最近去搞ios了,都沒有時間研究我的unity3d哭~~~

今天看到一個面試題,蒙圈了~

這道題是關於遞歸算法的,好在姐姐聰明機智搞明白了生氣

下面把我的想法和做法分享給大家,希望對像我醬紫的 小白有點作用奮鬥

原題目:設計遞歸算法x(x(8))需要調用幾次函數x(int n)。

class program
 {
     static void Main(string[] args)
     {
         int i;
         i = x(x(8));
     }
     static int x(int n)
     {
         if (n <= 3)
             return 1;
         else
             return x(n - 2) + x(n - 4) + 1;
     }
 }
答案解析:x(x(8))的結果是9,函數x(int n)被調用了18次。

首先先看x(8),代入函數:

x(8) = x(6) +x(4) +1
   = x(4) + x(2) +1 + x(2) + x(0) +1 + 1 
   = x(2) + x(0) +1 + 1 + 1 +1 + 1 +1 + 1 
   = 9,函數x(int n)被調用了9次
那麼,x(x(8))=x(9),代入函數:
x(9) = x(7) +x(5) +1
   = x(5) + x(3) +1 + x(3) + x(1) +1 + 1 
   = x(3) + x(1) +1 + 1 + 1 +1 + 1 +1 + 1 
   = 9,函數x(int n)被調用了9次
用二叉樹的思想理解比較簡單,如圖所示:

9次+9次=18次。所以函數x(int n)被調用了18次。
其實搞明白挺簡單的大笑


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章