遞歸和分治思想
如果可以使用迭代,盡量別使用遞歸。由編譯原理可以知道,每次自調(diào)用的時(shí)候,計(jì)算機(jī)都需要保存在調(diào)用,浪費(fèi)時(shí)間空間。當(dāng)然,迭代是當(dāng)我們知道循環(huán)次數(shù)的時(shí)候。而當(dāng)我們不知道循環(huán)次數(shù),比如說(shuō)對(duì)于文件夾和文件進(jìn)行遍歷,不知道深度的情況下,我們就需要遞歸來(lái)實(shí)現(xiàn)。
顯然,遞歸是先解決小的問(wèn)題,這種思想是分治思想。根據(jù)具體需求,來(lái)決定是否使用遞歸。
遞歸要注意:
結(jié)構(gòu)是選擇結(jié)構(gòu),而迭代是循環(huán)結(jié)構(gòu)
必須有基線條件和遞歸條件,防止出現(xiàn)死循環(huán)
如果知道循環(huán)次數(shù)的話,盡量使用遞歸
對(duì)于某些編程式函數(shù),有對(duì)于尾遞歸的迭代優(yōu)化
遞歸邏輯更容易理解
一些實(shí)例
逆序輸出字符串
#include<iostream>using namespace std;void print(){ char a; cin>>a; if(a!='#') print(); // 不是停止符,先自調(diào)用 if(a!='#') cout<<a; //在回來(lái)的時(shí)候,打印自己的字符