斐波那契數列遞迴次數

2022-08-09 04:48:13 字數 1443 閱讀 3310

我們可以先例項化,從少的數列發現規律,加入我們是計算f5,則有:f5=f4+f3,f4=f3+f2,f3=f1+f2,f2=f1+f0.這時我們來計算f1,f0精確計算了多少次,為了方便計算,我們畫圖來表示:

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

倒過來再換一種思路:

定義fib()如下:

int fib(intn)

由原來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函式列印出來才是最合適的答卷方式

定義fib()如下:

int fib(intn)

由原來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函式列印出來才是最合適的答卷方式

遞迴與斐波那契數列

迭代實現 def fab n a1 1 a2 1 a3 1if n 1 print 輸入有誤 return 1 while n 2 0 a3 a1 a2 a1 a2 a2 a3 a 1return a3 result fab 20 if result 1 print 總共有 d對小兔子誕生 resu...

遞迴演算法斐波那契數列

有一對兔子,從出生後第3個月起,每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子。假如兔子都不死,求第n個月兔子對數 關於斐波那契數列的兔子繁殖問題其實如下 實際月份 123 4567 8幼仔對數 101 1235 8成兔對數 011 2358 13總體對數 112 35813 21幼仔對...

遞迴實現斐波那契數列

斐波那契數列 f 1 1,f 2 1,f n f n 1 f n 2 n 3,n n package com.algorithm.tiger.recursion 遞迴和非遞迴方法實現斐波那契數列 斐波那契數列 f 1 1,f 2 1,f n f n 1 f n 2 n 3,n n descripti...