1. 程式人生 > >遞迴和迭代有什麼區別?

遞迴和迭代有什麼區別?

遞迴和迭代都是迴圈的一種。

簡單地說,遞迴是重複呼叫函式自身實現迴圈。迭代是函式內某段程式碼實現迴圈,而迭代與普通迴圈的區別是:迴圈程式碼中參與運算的變數同時是儲存結果的變數,當前儲存的結果作為下一次迴圈計算的初始值。

遞迴迴圈中,遇到滿足終止條件的情況時逐層返回來結束。迭代則使用計數器結束迴圈。當然很多情況都是多種迴圈混合採用,這要根據具體需求。

遞迴的例子,比如給定一個整數陣列,採用折半查詢返回指定值在陣列中的索引,假設陣列已排序,為方便描述,假設元素都為正數,陣列長度為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; }