- 遞歸的基本概念:程序調(diào)用自身的編程技巧稱為遞歸,是函數(shù)自己調(diào)用自己。
- 使用遞歸要注意的有兩點:
- 遞歸就是在過程或函數(shù)里面調(diào)用自身;
- 在使用遞歸時,必須有一個明確的遞歸結(jié)束條件,稱為遞歸出口。
- 遞歸分為兩個階段:
- 遞推:把復(fù)雜的問題的求解推到比原問題簡單一些的問題的求解;
- 回歸:當(dāng)獲得最簡單的情況后,逐步返回,依次得到復(fù)雜的解。
int fib(int n)
{
if(0 == n)
return 0;
if(1 == n)
return 1;
if(n > 1)
return fib(n-1)+fib(n-2);
}
- 迭代:利用變量的原值推算出變量的一個新值。
- 如果遞歸是自己調(diào)用自己的話,迭代就是A不停的調(diào)用B;
- 對一組命令(或一定步驟)進行重復(fù)執(zhí)行,在每次執(zhí)行這組命令(或步驟)時,都從變量的原值退出它的一個新值。
- 利用迭代算法解決問題,需要做好以下三個方面的工作:
- 確定迭代變量:在可以用迭代算法解決的問題中,至少存在一個直接或間接地不斷由舊值遞推出新值的變量,這個變量就是迭代變量;
- 建立迭代關(guān)系:所謂迭代關(guān)系,指如何從變量的前一個值推出其下一個值的公式(或關(guān)系)。迭代關(guān)系式的建立是解決問題的關(guān)鍵,通常可以使用遞推或倒推的方法來完成;
- 對迭代過程進行控制:在什么時候結(jié)束迭代過程。
- 遞歸中一定有迭代,但是迭代中不一定有遞歸,大部分可以相互轉(zhuǎn)換。
- 能用迭代的不用遞歸,遞歸調(diào)用函數(shù),浪費空間,并且遞歸太深容易造成堆棧的溢出。
- 遞歸設(shè)計:
- 先寫出一次執(zhí)行函數(shù);
- 再寫母函數(shù),按條件調(diào)用自己。