1. 程式人生 > >迴圈、遞迴、遍歷、迭代的區別

迴圈、遞迴、遍歷、迭代的區別

表示“重複”這個含義的詞有很多, 比如迴圈(loop), 遞迴(recursion), 遍歷(traversal), 迭代(iterate).
迴圈算是最基礎的概念, 凡是重複執行一段程式碼, 都可以稱之為迴圈. 大部分的遞迴, 遍歷, 迭代, 都是迴圈.

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



// 迭代,重複一定的演算法,達到想要的目的。數學上二分法,牛頓法是很好的迭代例子
function iteration(x){
   var sum=1; 
   for(x; x>=1; x--){
       sum = sum*x;
   }
}

// 遞迴,自身呼叫自身的迭代就是遞迴。
// 但是正式定義好像不是這麼說的。這只是我個人理解
function recursion(x){
   if(x>1){
       return x*recursion(x-1);
   }else{
       return 1;
   }
}

迭代式開發:迭代式開發應該是取自"迭代(數學)"的概念的, 意思是把開發過程劃分成若干個小目標, 對每個小目標單獨進行設計, 開發, 測試, 逐步地完成整個專案. 而傳統的開發過程是純線性的, 先統一設計, 再統一編碼, 再統一測試. 相比於傳統開發過程, 迭代式開發更靈活, 能夠適應需求的變更, 及時驗證設計的可行性等等的...

迭代開發更接近迴圈的意思,是指多次按照開發,測試,釋出這樣的週期迴圈來完成一個軟體產品的最終釋出。而不是試圖一次性完成所有工作,釋出最終版本



結論:
迴圈(loop) - 最基礎的概念, 所有重複的行為
遞迴(recursion) - 在函式內呼叫自身, 將複雜情況逐步轉化成基本情況
(數學)迭代(iterate) - 在多次迴圈中逐步接近結果
(程式設計)迭代(iterate) - 按順序訪問線性結構中的每一項
遍歷(traversal) - 按規則訪問非線性結構中的每一項

這些概念都表示“重複”的含義, 彼此互相交叉, 在上下文清晰的情況下, 不必做過於細緻的區分.