成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js遞歸原理之return

tinyq / 3197人閱讀

摘要:遞歸原理之先看以下代碼打開瀏覽器斷點(diǎn)調(diào)試,觀看執(zhí)行過程代碼執(zhí)行過程此時(shí)函數(shù)開始向上回溯將代碼修改一下每次將返回代碼執(zhí)行過程此時(shí)函數(shù)開始向上回溯總結(jié)所以在遞歸過程中,如果遞歸依賴上一次遞歸的結(jié)果,需要將結(jié)果。

js遞歸原理之return

先看以下代碼:

var a = 1;
function multiply(n) {
    if (n <= 1) {
        return 1;
    }
    a = n * multiply(n - 1);
    console.log("n:" + n);
    console.log("a:" + a);
}
console.log(multiply(5))

打開chrome瀏覽器斷點(diǎn)調(diào)試,觀看js執(zhí)行過程

//代碼執(zhí)行過程
a=n*multiply(n-1)//n=5 a=1
a=n*multiply(n-1)//n=4 a=1
a=n*multiply(n-1)//n=3 a=1
a=n*multiply(n-1)//n=2 a=1
a=n*multiply(n-1)//n=1 a=1 return 1

//此時(shí)函數(shù)開始向上回溯
a=n*multiply(n-1)//n=2 a=2*1=2
console.log("n:"+n)//n:2
console.log("a:"+a)//a:2 return undefined

a=n*multiply(n-1)//n=3 a=3*undefined=NaN
console.log("n:"+n)//n:3
console.log("a:"+a)//a:NaN return undefined

a=n*multiply(n-1)//n=4 a=4*undefined=NaN
console.log("n:"+n)//n:4
console.log("a:"+a)//a:NaN return undefined

a=n*multiply(n-1)//n=5 a=5*undefined=NaN
console.log("n:"+n)//n:5
console.log("a:"+a)//a:NaN return undefined

將代碼修改一下:

var a = 1;
function multiply(n) {
    if (n <= 1) {
        return 1;
    }
    a = n * multiply(n - 1);
    console.log("n:" + n);
    console.log("a:" + a);
    return a;//每次將a返回
}
console.log(multiply(5))
//代碼執(zhí)行過程
a=n*multiply(n-1)//n=5 a=1
a=n*multiply(n-1)//n=4 a=1
a=n*multiply(n-1)//n=3 a=1
a=n*multiply(n-1)//n=2 a=1
a=n*multiply(n-1)//n=1 a=1 return 1

//此時(shí)函數(shù)開始向上回溯
a=n*multiply(n-1)//n=2 a=2*1=2
console.log("n:"+n)//n:2
console.log("a:"+a)//a:2 return 2

a=n*multiply(n-1)//n=3 a=3*2=6
console.log("n:"+n)//n:3
console.log("a:"+a)//a:6 return 6

a=n*multiply(n-1)//n=4 a=4*6=24
console.log("n:"+n)//n:4
console.log("a:"+a)//a:24 return 24

a=n*multiply(n-1)//n=5 a=5*24=120
console.log("n:"+n)//n:5
console.log("a:"+a)//a:120 return 120

總結(jié):

所以在遞歸過程中,如果遞歸依賴上一次遞歸的結(jié)果,需要將結(jié)果return。

如果不需要上一次的結(jié)果,就不需要return。

所以示例代碼的正確寫法是:

function multiply(n) {
    if (n <= 1) {
        return 1;
    }
    return n * multiply(n - 1);
}

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107065.html

相關(guān)文章

  • 【進(jìn)階4-3期】面試題如何實(shí)現(xiàn)一個(gè)深拷貝

    摘要:今天這篇文章我們來看看一道必會(huì)面試題,即如何實(shí)現(xiàn)一個(gè)深拷貝。木易楊注意這里使用上面測(cè)試用例測(cè)試一下一個(gè)簡(jiǎn)單的深拷貝就完成了,但是這個(gè)實(shí)現(xiàn)還存在很多問題。 引言 上篇文章詳細(xì)介紹了淺拷貝 Object.assign,并對(duì)其進(jìn)行了模擬實(shí)現(xiàn),在實(shí)現(xiàn)的過程中,介紹了很多基礎(chǔ)知識(shí)。今天這篇文章我們來看看一道必會(huì)面試題,即如何實(shí)現(xiàn)一個(gè)深拷貝。本文會(huì)詳細(xì)介紹對(duì)象、數(shù)組、循環(huán)引用、引用丟失、Symbo...

    longmon 評(píng)論0 收藏0
  • JS算法深度優(yōu)先遍歷(DFS)和廣度優(yōu)先遍歷(BFS)

    摘要:算法之深度優(yōu)先遍歷和廣度優(yōu)先遍歷背景在開發(fā)頁(yè)面的時(shí)候,我們有時(shí)候會(huì)遇到這種需求在頁(yè)面某個(gè)節(jié)點(diǎn)中遍歷,找到目標(biāo)節(jié)點(diǎn),我們正常做法是利用選擇器,或者,但在本文,我們從算法的角度去查找節(jié)點(diǎn),同時(shí)理解一下深度優(yōu)先遍歷和廣度優(yōu)先遍歷的原理。 JS算法之深度優(yōu)先遍歷(DFS)和廣度優(yōu)先遍歷(BFS) 背景 在開發(fā)頁(yè)面的時(shí)候,我們有時(shí)候會(huì)遇到這種需求:在頁(yè)面某個(gè)dom節(jié)點(diǎn)中遍歷,找到目標(biāo)dom節(jié)點(diǎn),...

    roadtogeek 評(píng)論0 收藏0
  • JS專題memoization

    摘要:前言在計(jì)算機(jī)領(lǐng)域,記憶是主要用于加速程序計(jì)算的一種優(yōu)化技術(shù),它使得函數(shù)避免重復(fù)演算之前已被處理過的輸入,而返回已緩存的結(jié)果。被執(zhí)行了不是素?cái)?shù),其他數(shù)字默認(rèn)是素?cái)?shù)。我們可以看出,如果從開始打印斐波那契數(shù)列,函數(shù)被執(zhí)行了次。 前言 在計(jì)算機(jī)領(lǐng)域,記憶(memoization)是主要用于加速程序計(jì)算的一種優(yōu)化技術(shù),它使得函數(shù)避免重復(fù)演算之前已被處理過的輸入,而返回已緩存的結(jié)果。 -- wi...

    zhisheng 評(píng)論0 收藏0
  • PHP排序算法快速排序

    摘要:實(shí)現(xiàn)代碼判斷參數(shù)是否是一個(gè)數(shù)組遞歸出口數(shù)組長(zhǎng)度為,直接返回?cái)?shù)組數(shù)組元素有多個(gè),則定義兩個(gè)數(shù)組循環(huán)遍歷數(shù)組,把第一個(gè)元素當(dāng)做比較的對(duì)象判斷當(dāng)前元素的大小遞歸調(diào)用將所有的結(jié)果合并 原理:找到當(dāng)前數(shù)組中的任意一個(gè)元素(一般選擇第一個(gè)元素),作為標(biāo)準(zhǔn),新建兩個(gè)空數(shù)組left、rignt,遍歷整個(gè)數(shù)組元素,如果遍歷到的元素比當(dāng)前的元素小就放到數(shù)組left,比當(dāng)前的元素大放到rignt,然后再對(duì)新...

    CoderDock 評(píng)論0 收藏0
  • JS對(duì)象(2)

    摘要:前言一篇徹底搞懂對(duì)象從此不用擔(dān)心沒對(duì)象啦本文從對(duì)象定義方法對(duì)象屬性數(shù)據(jù)類型遍歷幾種方法對(duì)象拷貝和攔截對(duì)象屬性方法及代碼實(shí)現(xiàn)幾個(gè)方面由淺入深介紹對(duì)象對(duì)象的聲明方法字面量構(gòu)造函數(shù)的作用創(chuàng)了一個(gè)新對(duì)象指向構(gòu)造函數(shù)構(gòu)造函數(shù)有返回會(huì)替換出來的對(duì)象如果 showImg(https://segmentfault.com/img/bVboXHr?w=550&h=392); 前言 一篇徹底搞懂對(duì)象,從此...

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

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

0條評(píng)論

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