首先迭代就是用舊值不斷產(chǎn)生新值的過程:
int sum(int n )
{
int sum =0;
for(int i = 1 ; i <= n;i++) sum+=n;//求解1~n的和
return sum;
}
從上述例子中,從1一直加到n,每一次的和都是在上一次的和上加上n,因此,我們不難理解,所謂迭代法(輾轉(zhuǎn)法),就是一種不斷用變量的舊值遞推新值的過程。
迭代的過程分為3步:
1、確定迭代變量,如上面所示的變量sum
2、確定迭代關(guān)系式
3、確定迭代終止的條件
遞歸
int sum(int n )
{
if(n==1) return 1;
else return n+sum(n-1);
}
遞歸就是在函數(shù)內(nèi)部不斷調(diào)用自身
同樣是求0n的和,這段代碼是每次在函數(shù)體中調(diào)用自身函數(shù),1n的和可以拆分成兩個部分,1~n-1的和加上n,因此,遞歸的思想就是:在函數(shù)或子過程的內(nèi)部,直接或者間接地調(diào)用自己的算法,從而把問題轉(zhuǎn)化為規(guī)模縮小了的同類問題的子問題。
遞歸也需要終止條件
遞歸的過程:
1、確定遞歸的表達式
2、確定遞歸出口,終止條件
迭代是一個正向思考的過程,遞歸像是一個由大到小的過程。
用遞歸還是迭代?
顯然遞歸如果寫成代碼,會比較簡潔,但是遞歸的深度過大,會導(dǎo)致堆棧溢出,迭代雖然可讀性可能不如遞歸但是它的執(zhí)行效率高,正比于循環(huán)次數(shù)