国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js 遞歸調(diào)用

Gemini / 1648人閱讀

摘要:遞歸的概念在程序中函數(shù)直接或間接調(diào)用自己注意使用遞歸函數(shù)一定要注意,處理不當(dāng)就會(huì)進(jìn)入死循環(huán)。遞歸函數(shù)只有在特定的情況下使用,比如階乘問題。使用是一個(gè)指向正在執(zhí)行的函數(shù)的指針,返回正在被執(zhí)行的對(duì)現(xiàn)象。

程序員不止眼前的邏輯和代碼,還有底層的框架與架構(gòu)。
1. 前言

最近在做一個(gè)復(fù)雜表格設(shè)計(jì)數(shù)據(jù)格式設(shè)置,其中用到了多叉樹的原理,所以要用到遞歸來(lái)實(shí)現(xiàn)數(shù)據(jù)格式化。

2. 遞歸的概念

在程序中函數(shù)直接或間接調(diào)用自己

注意:使用遞歸函數(shù)一定要注意,處理不當(dāng)就會(huì)進(jìn)入死循環(huán)。遞歸函數(shù)只有在特定的情況下使用 ,比如階乘問題。

3. 例子 1. 一個(gè)階乘的例子:
function fact(num) {
       if (num <= 1) {
                return 1;
       } else {
                return num * fact(num - 1);
       }
}
fact(3) // 結(jié)果為 6

以下代碼可導(dǎo)致出錯(cuò):

var anotherFact = fact; 
fact = null; 
alert(antherFact(4)); //出錯(cuò) 

由于fact已經(jīng)不是函數(shù)了,所以出錯(cuò)。

使用arguments.callee
arguments.callee 是一個(gè)指向正在執(zhí)行的函數(shù)的指針,arguments.callee 返回正在被執(zhí)行的對(duì)現(xiàn)象。
新的函數(shù)為:

function fact(num){ 
    if (num<=1){ 
        return 1; 
    }else{ 
        return num*arguments.callee(num-1); //此處更改了。 
    } 
} 
var anotherFact = fact; 
fact = null; 
alert(antherFact(4)); //結(jié)果為24. 
2.再看一個(gè)多叉樹的例子:

先看圖

數(shù)據(jù)結(jié)構(gòu)格式,參考如下代碼:

headerData: {
                name: "總數(shù)據(jù)",
                children: [
                    {
                        name: "數(shù)據(jù)1",
                        children: [
                            {
                                name: "數(shù)據(jù)11",
                                children: [
                                    {
                                        name: "數(shù)據(jù)111",
                                    },
                                    {
                                        name: "數(shù)據(jù)112",
                                    }
                                ]
                            },
                            {
                                name: "數(shù)據(jù)12",
                                children: [
                                    {
                                        name: "數(shù)據(jù)121",
                                    },
                                    {
                                        name: "數(shù)據(jù)122",
                                    }
                                ]
                            },
                            {
                                name: "數(shù)據(jù)13",
                                children: [
                                    {
                                        name: "數(shù)據(jù)131",
                                    },
                                    {
                                        name: "數(shù)據(jù)132",
                                    }
                                ]
                            },
                            {
                                name: "數(shù)據(jù)14",
                            },

                        ]
                    }
                ]
            }

我們?nèi)绾潍@取節(jié)點(diǎn)的所有葉子節(jié)點(diǎn)個(gè)數(shù)呢? 遞歸代碼如下:

/**
 * 獲取 節(jié)點(diǎn)的所有 葉子節(jié)點(diǎn) 個(gè)數(shù)
 * @param {Object} json Object對(duì)象
 */
function getLeafCountTree(json) {
  if(!json.children){
      return 1;
  }else{
      var leafCount = 0;
      for(var i = 0 ; i < json.children.length ; i++){
          leafCount = leafCount + getLeafCountTree(json.children[i]);
      }
      return leafCount;
  }
}
最后

遞歸遍歷是比較常用的方法,比如:省市區(qū)遍歷成樹、多叉樹、階乘等。
希望本文對(duì)你有點(diǎn)幫助。

你以為本文就這么結(jié)束了 ? 精彩在后面 !!!

對(duì) 全棧修煉 有興趣的朋友可以掃下方二維碼關(guān)注我的公眾號(hào)

我會(huì)不定期更新有價(jià)值的內(nèi)容,長(zhǎng)期運(yùn)營(yíng)。

關(guān)注公眾號(hào)并回復(fù) 福利 可領(lǐng)取免費(fèi)學(xué)習(xí)資料,福利詳情請(qǐng)猛戳: Python、Java、Linux、Go、node、vue、react、javaScript

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/96415.html

相關(guān)文章

  • JavaScript中的遞歸

    摘要:第三次第四次設(shè)想,如果傳入的參數(shù)值特別大,那么這個(gè)調(diào)用棧將會(huì)非常之大,最終可能超出調(diào)用棧的緩存大小而崩潰導(dǎo)致程序執(zhí)行失敗。注意尾遞歸不一定會(huì)將你的代碼執(zhí)行速度提高相反,可能會(huì)變慢。 譯者按: 程序員應(yīng)該知道遞歸,但是你真的知道是怎么回事么? 原文: All About Recursion, PTC, TCO and STC in JavaScript 譯者: Fundebug ...

    Jacendfeng 評(píng)論0 收藏0
  • 翻譯連載 | 第 9 章:遞歸(下)-《JavaScript輕量級(jí)函數(shù)式編程》 |《你不知道的JS

    摘要:每個(gè)函數(shù)調(diào)用都將開辟出一小塊稱為堆棧幀的內(nèi)存。當(dāng)?shù)诙€(gè)函數(shù)開始執(zhí)行,堆棧幀增加到個(gè)。當(dāng)這個(gè)函數(shù)調(diào)用結(jié)束后,它的幀會(huì)從堆棧中退出。保持堆棧幀跟蹤函數(shù)調(diào)用的狀態(tài),并將其分派給下一個(gè)遞歸調(diào)用迭。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 關(guān)于譯者:這是一個(gè)流淌著滬江血液的純粹工程:認(rèn)真,是 HTM...

    LeviDing 評(píng)論0 收藏0
  • [翻譯] JS遞歸與TCO尾調(diào)用優(yōu)化

    這兩天搜了下JS遞歸的相關(guān)文章, 覺得這篇文章很不錯(cuò), 就順手翻譯了下,也算給自己做個(gè)筆記,題目是我自己加的。原文很長(zhǎng),寫得也很詳盡,這里并非逐字翻譯, 而是作者所講的主要概念加上我自己的一些理解,本文中解決方案的實(shí)際意義并不是特別大,但算法的邏輯挺有意思,不過也略抽象,理解需要花點(diǎn)時(shí)間(囧,估計(jì)我太閑了) 文中的用例?全部來(lái)自原文: 原文鏈接:(原題為:理解JS函數(shù)式編程中的遞歸)Underst...

    pekonchan 評(píng)論0 收藏0
  • JS遞歸與二叉樹的遍歷

    摘要:貌似大部分語(yǔ)言中的遞歸都差不多,之所以在標(biāo)題加是因?yàn)樗蚜讼潞蟾杏X網(wǎng)上用來(lái)描述這概念的不多,簡(jiǎn)單地說(shuō)遞歸就是函數(shù)調(diào)用自己的過程。 貌似大部分語(yǔ)言中的遞歸都差不多, 之所以在標(biāo)題加JS是因?yàn)樗蚜讼潞蟾杏X網(wǎng)上用js來(lái)描述這概念的不多, 簡(jiǎn)單地說(shuō)遞歸就是函數(shù)調(diào)用自己的過程。下面的栗子可以很直觀地展示遞歸的執(zhí)行過程: function rec(x){ if(x!==1){ console....

    church 評(píng)論0 收藏0
  • 翻譯連載 | 第 9 章:遞歸(上)-《JavaScript輕量級(jí)函數(shù)式編程》 |《你不知道的JS

    摘要:一旦我們滿足了基本條件值為,我們將不再調(diào)用遞歸函數(shù),只是有效地執(zhí)行了。遞歸深諳函數(shù)式編程之精髓,最被廣泛引證的原因是,在調(diào)用棧中,遞歸把大部分顯式狀態(tài)跟蹤換為了隱式狀態(tài)。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 關(guān)于譯者:這是一個(gè)流淌著滬江血液的純粹工程:認(rèn)真,是 HTML 最堅(jiān)實(shí)的梁柱;...

    MasonEast 評(píng)論0 收藏0
  • js算法入門(3)--遞歸

    摘要:在遞歸過程中,未完成計(jì)算的函數(shù)將會(huì)掛起壓入調(diào)用堆棧,不然遞歸結(jié)束的時(shí)候沒辦法進(jìn)行回溯。這就引出了回溯法回溯法就是在達(dá)到遞歸邊界前的某層,由于一些事實(shí)導(dǎo)致已經(jīng)不需要前往任何一個(gè)子問題遞歸,就可以直接返回上一層。 1簡(jiǎn)介 遞歸在前端開發(fā)中應(yīng)用還是非常廣泛的,首先DOM就是樹狀結(jié)構(gòu),而這種結(jié)構(gòu)使用遞歸去遍歷是非常合適的。然后就是對(duì)象和數(shù)組的深復(fù)制很多庫(kù)也是使用遞歸實(shí)現(xiàn)的例如jquery中的e...

    jzman 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<