- 遞歸的基本概念:程序調(diào)用自身的編程技巧稱為遞歸,是函數(shù)自己調(diào)用自己。
- 使用遞歸要注意的有兩點(diǎn):
- 遞歸就是在過(guò)程或函數(shù)里面調(diào)用自身浦徊;
- 在使用遞歸時(shí),必須有一個(gè)明確的遞歸結(jié)束條件,稱為遞歸出口。
- 遞歸分為兩個(gè)階段:
- 遞推:把復(fù)雜的問(wèn)題的求解推到比原問(wèn)題簡(jiǎn)單一些的問(wèn)題的求解天梧;
- 回歸:當(dāng)獲得最簡(jiǎn)單的情況后,逐步返回,依次得到復(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);
}
- 迭代:利用變量的原值推算出變量的一個(gè)新值呢岗。
- 如果遞歸是自己調(diào)用自己的話,迭代就是A不停的調(diào)用B后豫;
- 對(duì)一組命令(或一定步驟)進(jìn)行重復(fù)執(zhí)行悉尾,在每次執(zhí)行這組命令(或步驟)時(shí)挫酿,都從變量的原值退出它的一個(gè)新值构眯。
- 利用迭代算法解決問(wèn)題早龟,需要做好以下三個(gè)方面的工作:
- 確定迭代變量:在可以用迭代算法解決的問(wèn)題中鸵赖,至少存在一個(gè)直接或間接地不斷由舊值遞推出新值的變量,這個(gè)變量就是迭代變量;
- 建立迭代關(guān)系:所謂迭代關(guān)系饵骨,指如何從變量的前一個(gè)值推出其下一個(gè)值的公式(或關(guān)系)翘悉。迭代關(guān)系式的建立是解決問(wèn)題的關(guān)鍵居触,通逞欤可以使用遞推或倒推的方法來(lái)完成轮洋;
- 對(duì)迭代過(guò)程進(jìn)行控制:在什么時(shí)候結(jié)束迭代過(guò)程制市。
- 遞歸中一定有迭代,但是迭代中不一定有遞歸祥楣,大部分可以相互轉(zhuǎn)換。
- 能用迭代的不用遞歸,遞歸調(diào)用函數(shù)责鳍,浪費(fèi)空間,并且遞歸太深容易造成堆棧的溢出兽间。
- 遞歸設(shè)計(jì):
- 先寫出一次執(zhí)行函數(shù);
- 再寫母函數(shù)嘀略,按條件調(diào)用自己恤溶。