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

資訊專欄INFORMATION COLUMN

js遞歸原理之return

tinyq / 3189人閱讀

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

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瀏覽器斷點調試,觀看js執行過程

//代碼執行過程
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

//此時函數開始向上回溯
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))
//代碼執行過程
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

//此時函數開始向上回溯
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

總結:

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

如果不需要上一次的結果,就不需要return。

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107065.html

相關文章

  • 【進階4-3期】面試題如何實現一個深拷貝

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

    longmon 評論0 收藏0
  • JS算法深度優先遍歷(DFS)和廣度優先遍歷(BFS)

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

    roadtogeek 評論0 收藏0
  • JS專題memoization

    摘要:前言在計算機領域,記憶是主要用于加速程序計算的一種優化技術,它使得函數避免重復演算之前已被處理過的輸入,而返回已緩存的結果。被執行了不是素數,其他數字默認是素數。我們可以看出,如果從開始打印斐波那契數列,函數被執行了次。 前言 在計算機領域,記憶(memoization)是主要用于加速程序計算的一種優化技術,它使得函數避免重復演算之前已被處理過的輸入,而返回已緩存的結果。 -- wi...

    zhisheng 評論0 收藏0
  • PHP排序算法快速排序

    摘要:實現代碼判斷參數是否是一個數組遞歸出口數組長度為,直接返回數組數組元素有多個,則定義兩個數組循環遍歷數組,把第一個元素當做比較的對象判斷當前元素的大小遞歸調用將所有的結果合并 原理:找到當前數組中的任意一個元素(一般選擇第一個元素),作為標準,新建兩個空數組left、rignt,遍歷整個數組元素,如果遍歷到的元素比當前的元素小就放到數組left,比當前的元素大放到rignt,然后再對新...

    CoderDock 評論0 收藏0
  • JS對象(2)

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

    CarterLi 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<