一、遞歸算法:直接或間接地調用自身的算法。
1、使用遞歸要注意的有兩點:
- 遞歸就是在過程或函數里面調用自身;
- 在使用遞歸時,必須有一個明確的遞歸結束條件,稱為遞歸出口.
2、遞歸分為兩個階段:
- 遞推:把復雜的問題的求解推到比原問題簡單一些的問題的求解;
- 回歸:當獲得最簡單的情況后,逐步返回,依次得到復雜的解.
利用遞歸可以解決很多問題:如背包問題,漢諾塔問題,...等.
3、優缺點
- 優點:結構清晰,可讀性強,且容易用數學歸納法證明算法的正確性。
- 缺點:(1) 遞歸算法需要調用遞歸棧存放函數的變量、計算結果等直至return后才會釋放該棧,所以消耗內存空間;
(2) 可能存在重復計算相同的子問題。
二、分治法:將一個規模為n的問題分解為k個規模較小的子問題,這些子問題相互獨立且與原問題相同,然后遞歸地解這些子問題,
最后將各個子問題的解合並得到原問題的接。
應用:二分搜索、大整數乘法。
三、迭代:利用變量的原值推算出變量的一個新值。
四、遞歸和迭代的區別:
通過斐波那契數列為例:
F(0)=1; n = 0
F(n) = F(1)=1; n = 1
F(n)=F(n-1)+F(n-2); n > 1

//遞歸實現 int fib(int n){ if(n>1) return fib(n-1) + fib(n-2); else return 1; // n = 0, 1時給出recursion終止條件 } //迭代實現 int fib(int n){ int i, temp0, temp1, temp2; if(n<=1) return 1; temp1 = 0; temp2 = 1; for(i = 2; i <= n; i++){ temp0 = temp1 + temp2; temp2 = temp1; temp1 = temp0; } return temp0; }