尾遞迴 通過斐波那契的迭代法和尾遞迴法了解

2021-08-13 04:03:35 字數 903 閱讀 2084

1.斐波那契的遞迴寫法:

int fib(int n)

}

其流程圖(以求第4個斐波那契數為例)如下:

缺點:

①只是使用於n比較小的時候,否則效率低因為會做很多次重複操作

②而且該例遞迴屬於多分支遞迴,容易造成棧溢位

2.斐波那契的尾遞迴寫法if(3 == n)

return fib(second,first+second,n-1);}

其流程圖(以求第7個斐波那契數為例)如下:

②原本樸素的遞迴產生的棧的層次像二叉樹一樣,以指數級增長,但是現在棧的層次卻像是陣列,變成線性增長了,簡單來說,原本棧是先擴充套件開,然後邊收攏邊計算結果,現在卻變成在呼叫自身的同時通過引數來計算

3.斐波那契的迭代演算法

int fib(int n)

return c;

}

尾遞迴可以轉換成迭代演算法

總結:尾遞迴的本質是:將單次計算的結果快取起來,傳遞給下次呼叫,相當於自動累積。

斐波那契 尾遞迴

1 計算任意數n的階乘 5 5 4 3 2 1 8 8 7 6 5 4 3 2 1 遞迴函式通過兩個條件出發回的過程 1 當前函式徹底執行完畢的時候,觸發回的過程,回到上一層函式的呼叫處 2 當前函式遇到return 返回值的時,觸發回的過程,回到上一層函式的呼叫處 普通方法 n 5 total 1...

斐波那契 尾遞迴,DP

先看斐波拉契遞迴的樸素版本 int fib1 int n 這段 的意思是 第n個數等於前兩個數之和。但 f 1 1,f 0 0,這兩個特殊值作為遞迴出口。優化 尾遞迴 int fib wei int n int a,int b intmain 這段 明顯可讀性比樸素版本低,但優點在於將時間複雜度從o...

遞迴和尾遞迴的比較,斐波那契

相信如果乙個人讓我們求乙個斐波那契數列,如果你學過c語言,你一定會說用遞迴法啊,很容易就實現了,但是如果人家讓你求斐波那契的第50個數,而且你對遞迴了解的話,估計幫你不會說遞迴了,如果了解夠深的話,其實你會說遞迴也可以求出來。1 遞迴 首先我們來說說什麼是遞迴,簡單的來說,就是乙個函式需要呼叫自己來...