1. 程式人生 > >對遞歸和叠代的認識

對遞歸和叠代的認識

else 使用 程序 tro 小問題 函數 有一個 OS 缺點

遞歸:程序調用自身的編程技巧稱為遞歸,就是函數重復的自己調用自己。在使用遞歸時,必須有一個明確的遞歸結束條件,稱為遞歸出口.

叠代:利用變量的原值推算出變量的一個新值.如果遞歸是自己調用自己的話,叠代就是A不停的調用B。

遞歸的優點:

1)大問題化為小問題,可以極大的減少代碼量;

2)用有限的語句來定義對象的無限集合.

3)代碼更簡潔清晰,可讀性更好

叠代的優點:

1)叠代效率高,運行時間只因循環次數增加而增加;

2)沒什麽額外開銷,空間上也沒有什麽增加。

遞歸的缺點:

1)遞歸調用函數,浪費空間;

2)遞歸太深容易造成堆棧的溢出。

叠代的缺點:

1) 不容易理解;

2) 代碼不如遞歸簡潔;

3) 編寫復雜問題時困難。

二者的關系:

1) 遞歸中一定有叠代,但是叠代中不一定有遞歸,大部分可以相互轉換。

2) 能用叠代的不用遞歸,遞歸調用函數,浪費空間,並且遞歸太深容易造成堆棧的溢出.

遞歸的實例:折半查找法

function sort(arr){
if (arr.length<=1) {
return arr;
}
var pivotIndex=Math.floor(arr.length/2);
var privot = arr.splice(pivotIndex,1)[0];
var left = [];
var right = [];

for (var i=0;i<arr.length;i++) {
if (arr[i]<=privot) {
left.push(arr[i]);
} else{
right.push(arr[i]);
}
}

//遞歸
return sort(left).concat([privot],sort(right));
}

叠代的實例:計算1-100所有實數的和

var v=1;

for(var i=100;i<=100;1--){

v=v+i;

}

對遞歸和叠代的認識