JS遞迴的用法JavaScript遞迴)
阿新 • • 發佈:2018-12-10
遞迴:
函式中用呼叫函式自己,此時就是遞迴,遞迴一定要有結束條件
function f1() {
console.log("從前有座山,山裡有個廟,廟裡有個老和尚給小和尚講故事:");
};
f1();//瀏覽器崩潰,因為沒有結束條件——死迴圈
改進如下:
var i=0;
function f1() {
i++;
if (i<5){
f1();
}
console.log("從前有座山,山裡有個廟,廟裡有個老和尚給小和尚講故事:" );
};
f1();
小栗子:
遞迴實現:求n個數字的和 n=5 ——->5+4+3+2+1
//for 迴圈寫法:
var sum=0;
for (var i=0;i<=5;i++){
sum+=i;
}
console.log(sum);
----------------------分割線---------------------------
function getSum(x) {
if (x==1){
return 1
}
return x+getSum(x-1);
};
var sum1=getSum(5);
console.log(sum1);
console.log(getSum(10));
執行過程: 程式碼執行getSum(5)—>進入函式,此時的x是5,執行的是5+getSum(4),此時程式碼等待 此時5+getSum(4),程式碼先不進行計算,先執行getSum(4),進入函式,執行的是4+getSum(3),等待, 先執行的是getSum(3),進入函式,執行3+getSum(2),等待,先執行getSum(2),進入函式,執行 2+getSum(1);等待, 先執行getSum(1),執行的是x==1的判斷,return 1,所以, 此時getSum(1)的結果是1,開始向外走出去 2+getSum(1) 此時的結果是:2+1 執行: getSum(2)—->2+1 3+getSum(2) 此時的結果是3+2+1 4+getSum(3) 此時的結果是4+3+2+1 5+getSum(4) 此時的結果是5+4+3+2+1
結果:15
再來幾個:
//遞迴案例:求一個數字各個位數上的數字的和: 123 --->6 ---1+2+3
//523
function getEverySum(x) {
if(x<10){
return x;
}
//獲取的是這個數字的個位數
return x%10+getEverySum(parseInt(x/10));
}
console.log(getEverySum(1364));//5
//遞迴案例:求斐波那契數列
function getFib(x) {
if(x==1||x==2){
return 1
}
return getFib(x-1)+getFib(x-2);
}
console.log(getFib(12));