真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

員工經(jīng)過長期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊(duì)的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡單”。公司專注于為企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、微信公眾號開發(fā)、電商網(wǎng)站開發(fā),成都小程序開發(fā),軟件按需開發(fā)網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。

遞歸實(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ù)大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!


新聞名稱:JavaScript中遞歸實(shí)現(xiàn)的方法及其區(qū)別
網(wǎng)站網(wǎng)址:http://weahome.cn/article/jsogjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部