迭代 遞歸 普通循環的區別

遞歸和迭代都是循環的一種。
簡單地說,遞歸是重複調用函數自身實現循環。迭代是函數內某段代碼實現循環,而迭代與普通循環的區別是:循環代碼中參與運算的變量同時是保存結果的變量,當前保存的結果作爲下一次循環計算的初始值。

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

遞歸的例子,比如給定一個整數數組,採用折半查詢返回指定值在數組中的索引,假設數組已排序,爲方便描述,假設元素都爲正數,數組長度爲2的整數倍。
折半查詢是查詢的一種,比遍歷所有元素要快很多。

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所有實數的和。

int v=1;
for(i=2;i<=100;i++)
{
v=v+i;
}

發佈了57 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章