JS 函式的遞迴演算法

2021-09-10 14:53:45 字數 1627 閱讀 1644

一、什麼是函式的遞迴

函式反覆呼叫自己,直到最終結果,跳出

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...