遞歸和迭代都是循環的一種。
簡單地說,遞歸是重複調用函數自身實現循環。迭代是函數內某段代碼實現循環,而迭代與普通循環的區別是:循環代碼中參與運算的變量同時是保存結果的變量,當前保存的結果作爲下一次循環計算的初始值。
遞歸循環中,遇到滿足終止條件的情況時逐層返回來結束。迭代則使用計數器結束循環。當然很多情況都是多種循環混合採用,這要根據具體需求。
遞歸的例子,比如給定一個整數數組,採用折半查詢返回指定值在數組中的索引,假設數組已排序,爲方便描述,假設元素都爲正數,數組長度爲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;
}