国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript中遞歸實(shí)現(xiàn)的方法及其區(qū)別

2024-05-06 15:26:53
字體:
供稿:網(wǎng)友

遞歸函數(shù):遞歸函數(shù)是在通過名字調(diào)用自身的情況下構(gòu)成的。

遞歸實(shí)現(xiàn)階乘函數(shù):

方法一:通過使用函數(shù)的名字

 function factorial(num){    if(num<=1){      return 1;    }else{      return num*factorial(num-1);    }  }  console.log(factorial(4));

結(jié)果為:24;

但是這種方法實(shí)現(xiàn)遞歸有一個問題,觀察以下代碼:

function factorial(num){    if(num<=1){      return 1;    }else{      return num*factorial(num-1);    }  }  var anthorFactorial=factorial;  console.log(anthorFactorial(4));

結(jié)果為:24;

但是:

function factorial(num){    if(num<=1){      return 1;    }else{      return num*factorial(num-1);    }  }  var anthorFactorial=factorial;  factorial=null;  console.log(anthorFactorial(4));

結(jié)果為:報錯

這是因?yàn)椋?/p>

我們定義的函數(shù)名,其實(shí)是指向函數(shù)的一個指針,定義的anotherFactorial 也指向了那個函數(shù),所以調(diào)用anotherFactorial (4)可以成功的輸出24

當(dāng) factorial = null時,執(zhí)行定義函數(shù)的引用就剩下了anotherFactorial,那么在調(diào)用anotherFactorial(4)就會顯示以上的錯誤的信息。

此時可以使用arguments.callee來替代函數(shù)定義中的 factorial。

方法二:通過使用arguments.callee

function factorial(num){    if(num<=1){      return 1;    }else{      return num*arguments.callee(num-1);    }  }  var anthorFactorial=factorial;  factorial=null;  console.log(anthorFactorial(4));

結(jié)果為:24

arguments.callee是一個指向正在執(zhí)行的函數(shù)的指針,因此可以用arguments.callee來實(shí)現(xiàn)對函數(shù)的遞歸調(diào)用。通過使用arguments.callee來代替函數(shù)名,可以保證在調(diào)用函數(shù)時無論怎樣都不會出現(xiàn)問題。因此,在編寫遞歸函數(shù)時,使用argumnts.callee總比使用函數(shù)名更加保險。
但是,在嚴(yán)格模式下,不能通過腳本訪問arguments.callee,訪問這個屬性會報錯,不過可以通過命名函數(shù)表達(dá)式來達(dá)到相同的效果。

方法三:通過命名函數(shù)表達(dá)式

 var factorial=function f(num){    if(num<=1){      return 1;    }else{      return num*f(num-1);    }  };  f=null;  console.log(factorial(4));

這種方式在嚴(yán)格和非嚴(yán)格模式下都有效。

總結(jié)

以上所述是小編給大家介紹的JavaScript中遞歸實(shí)現(xiàn)的方法及其區(qū)別,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對錯新站長站網(wǎng)站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 林甸县| 祁门县| 河东区| 德令哈市| 鄂托克前旗| 兰考县| 神木县| 巴东县| 棋牌| 明溪县| 乐清市| 三台县| 赣榆县| 常州市| 寿光市| 永丰县| 南康市| 安远县| 八宿县| 孟津县| 葵青区| 德令哈市| 自治县| 富川| 万年县| 攀枝花市| 武乡县| 龙井市| 屏南县| 波密县| 中宁县| 丰台区| 巴楚县| 杂多县| 北京市| 东宁县| 东宁县| 徐水县| 团风县| 象州县| 兴仁县|