JavaScript 之遞歸問題的解決

遞歸:

遞歸函數(shù)在定義的時候需要調(diào)用自己,因此會用到自己的函數(shù)名;但是在js中會出現(xiàn)如下的問題:
<pre>
function factorial(num) {
if (num <= 1)
return 1;
else
return num * factorial(num - 1);
}
var anotherFactorial = factorial;
factorial = null;
anotherFactorial(6);
//由于迭代過程中需要用到factorial,但該值已被賦值為空,所以會出錯
</pre>

解決方法:有兩種方式可以解決該問題
1.使用 arguments.callee:
該參數(shù)指向一個正在執(zhí)行的函數(shù)的指針,因此可以用它來實現(xiàn)函數(shù)對自身的遞歸調(diào)用。
<pre>
function factorial(num) {
if (num <= 1)
return 1;
else
return num * arguments.callee(num - 1);
}
var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(6));
</pre>
這種寫法之下,即便factorial被賦值為空,依然可以引用自身來實現(xiàn)遞歸。
2.使用命名函數(shù)表達式
但是在嚴格模式之下,不可以訪問arguments.callee屬性,因此可以使用命名函數(shù)表達式:
<pre>
eg:var factorial = (function f(num) {
if (num <= 1)
return 1;
else
return num * f(num - 1);});
</pre>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,679評論 0 4
  • 本文檔內(nèi)容參考 《JavaScript 闖關記》之函數(shù) 函數(shù)是一段代碼,它只定義一次,但可以被執(zhí)行或調(diào)用任意次。在...
    穿越人海遇見你閱讀 1,112評論 0 1
  • 定義函數(shù)的方式有兩種:函數(shù)聲明和函數(shù)表達式。 函數(shù)聲明的一個重要特征就是函數(shù)聲明提升,意思是在執(zhí)行代碼前會先讀取函...
    oWSQo閱讀 736評論 0 0
  • 原文地址:C語言函數(shù)調(diào)用棧(一)C語言函數(shù)調(diào)用棧(二) 0 引言 程序的執(zhí)行過程可看作連續(xù)的函數(shù)調(diào)用。當一個函數(shù)執(zhí)...
    小豬啊嗚閱讀 4,971評論 1 19
  • 每當你看見細細的雨,你會想到什么呢?而我沒當看見細細的雨,總把他幻想成一條條的線,這一條條的線就是大自然給你的...
    影子落英閱讀 362評論 0 0

友情鏈接更多精彩內(nèi)容