一、什麼是函式的遞迴
函式反覆呼叫自己,直到最終結果,跳出
var n = 0;
shownumber();
function shownumber()
shownumber();
}
二、舉例
例1:遞迴階乘函式
function factorial(num)
else
}
問題1:以上函式表面看起來沒有問題,但下面**會導致其出錯,例:
var anothe***ctorial=factorial;
factorial=null;
alert(anothe***ctorial(3)); //出錯
以上**先把factorial()函式儲存在變數anothe***ctorial中,然後將factorial變數設定為null,結果指向原始函式的引用只剩下乙個。但在接下來呼叫anothe***ctorial()時,由於必須執行factorial(),而factorial已經不再是乙個函式,就會導致錯誤。因此,需用arguments.callee,即乙個指向正在執行的函式的指標,可以用它來實現函式的遞迴呼叫,例:
function factorial(num)
else
}
問題2:在嚴格模式下,不能通過指令碼訪問arguments.callee,訪問這個屬性會導致錯誤。因此,可使用命名函式表示式來達成相同結果,例:
var factorial=(function f(num)
else
});var anothe***ctorial=factorial;
factorial=null;
alert(anothe***ctorial(4));
以上**建立了乙個名為f()的命名函式表示式,然後將它賦值給變數factorial。即便把函式賦值給了另乙個變數,函式的名字f仍然有效。
例2:5的n!
function jiecheng(n)
return jiecheng(n - 1) * n;
}console.log(jiecheng(5));
//f(3)=f(2)*3; f(3)=1*1*2*3
//f(2)=f(1)*2;
//f(1)=f(0)*1
例3:fibonacci數列 1,1,2,3,5,8,13,21
當前位的值
var fib = function (n)
return fib(n - 2) + fib(n - 1);
}console.log(fib(3));
//fib(3) fib(1)+fib(0)+fib(1)
//fib(2) fib(1)+fib(0)
例4:1-100之和
function f1(x)
return x + f1(x - 1);
}console.log(f1(100));
js函式遞迴
一 遞迴函式概念 自己呼叫自己。二 知識說明 function func func 三 函式 變數 用遞迴來求5的階乘 function func n return n func n 1 console.log func 5 三 函式 函式 斐波拉契題 兔子生兔子題目 從出生後第3個月起每個月都生一...
js 遞迴函式
定義 如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。舉例說明 1.求n的階乘 n 1 x 2 x 3 x x n function factorial n return n factorial n 1 console.log factorial 5 factorial 5 5 factori...
js函式遞迴
一 知識說明 function fun fun 二 函式 變數 用遞迴 來求 5 的階乘 n n n 1 定義乙個函式,用於求 n 的階乘 function func n func n 1 因為傳遞的引數是 n 1,那麼就是求 n 1 的階乘 return n func n 1 console.lo...