遞迴和迭代有什麼區別?
阿新 • • 發佈:2019-02-12
遞迴和迭代都是迴圈的一種。
簡單地說,遞迴是重複呼叫函式自身實現迴圈。迭代是函式內某段程式碼實現迴圈,而迭代與普通迴圈的區別是:迴圈程式碼中參與運算的變數同時是儲存結果的變數,當前儲存的結果作為下一次迴圈計算的初始值。
遞迴迴圈中,遇到滿足終止條件的情況時逐層返回來結束。迭代則使用計數器結束迴圈。當然很多情況都是多種迴圈混合採用,這要根據具體需求。
遞迴的例子,比如給定一個整數陣列,採用折半查詢返回指定值在陣列中的索引,假設陣列已排序,為方便描述,假設元素都為正數,陣列長度為2的整數倍。
折半查詢是查詢的一種,比遍歷所有元素要快很多。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
int Find( int *ary, int index, int len, int value)
{
if (len==1) //最後一個元素
{
if (ary[index]==value) return index; //成功查詢返回索引
return -1; //失敗,返回-1
}
//如果長度大於1,進行折半遞迴查詢
int half=len/2;
//檢查被查值是否大於上半部分最後一個值,如果是則遞迴查詢後半部分
if (value>ary[index+half-1])
return Find(ary,index+half,half,value);
//否則遞迴查詢上半部分
return Find(ary,index,half,value);
}
|
迭代經典例子就是實數的累加,比如計算1-100所有實數的和。
1 2 3 4 5 |
int v=1;
for (i=2;i<=100;i++)
{
v=v+i;
}
|