斐波那契數列遞歸次數


我們可以先實例化,從少的數列發現規律,加入我們是計算F5,則有:F5=F4+F3,F4=F3+F2,F3=F1+F2,F2=F1+F0.這時我們來計算F1,F0精確計算了多少次,為了方便計算,我們畫圖來表示:

 

 根據二叉樹結點的個數可以得出調用的次數,個數可由完全二叉樹的性質得出

 

 

 

 

倒過來再換一種思路:

定義fib()如下:

int fib(int n) { count ++; if (n==0) return 1; else if (n==1) return 1; else return fib(n-1) + fib(n-2); }

由原來fib的地推公式得出求解次數的地推公式。

那么Count(fib(10)) = count(fib(9))  + count(fib(8)) + 1;

求解count( fib(n) ) 的次數,就是計算fib(n)遞歸樹(是一個二叉樹),葉子結點的個數。

count( fib(0) ) = 1

count( fib(1) ) = 1

count( fib(2) ) = count ( fib(1) ) + count( fib(0) )  + 1 = 3

count( fib(3) ) = count ( fib(2) ) + count( fib(1) )  + 1 = 3+1+1 = 5

這個樣子計算的還是很快的

fib(10),一共調用了 177次。

其實上面是360的一道面試題

 

不,也是河南師范大學的考研真題,一小問,差點在程序里再模擬一下fib讓程序自己算去了(也能出結果但是格式上看着好難受),但是這樣又明顯違背了主程序和被調用函數的分離,只有自己記住結論再用一個簡單的printf函數打印出來才是最合適的答卷方式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM