最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript遞歸詳述

 更新時間:2022年01月24日 15:22:04   作者:bear*6  
這篇文章主要介紹了JavaScript遞歸,遞歸就是當(dāng)一個函數(shù)可以調(diào)用自己,那么這個函數(shù)就是遞歸,接下倆我們就來看看下面文章的詳細(xì)介紹內(nèi)容,需要的小伙伴可以參考一下,希望對你有所幫助

一、什么是遞歸?

如果一個函數(shù)在內(nèi)部可以調(diào)用其本身,那么這個函數(shù)就是遞歸函數(shù)。簡單理解:函數(shù)內(nèi)部自己調(diào)用自己, 這個函數(shù)就是遞歸函數(shù)。

如下所示:

function fn(){
 fn();
}
fn();

這個函數(shù)就是一個遞歸函數(shù),當(dāng)我們直接打印時,會:

發(fā)現(xiàn)打印錯誤,這是為什么呢?因為遞歸函數(shù)的作用和循環(huán)效果一樣。當(dāng)沒有給他返回值的時候,它就會一直死循環(huán)下去。所以,我們知道了:

由于遞歸很容易發(fā)生“棧溢出”錯誤(stack overflow),所以必須要加退出條件 return

那正確的遞歸函數(shù)應(yīng)該怎樣寫呢?以上述代碼為例:比如我們現(xiàn)在要打印五遍‘你好’,這時,我們應(yīng)該這樣來寫:

var num = 1;
function fn(){
            console.log('你好');
            if(num == 5){
                return;
            }
            num++;
            fn();
        }
        fn();

打印結(jié)果為:

知道了遞歸是什么,那我們再來看看如何利用遞歸解決問題吧!

二、利用遞歸求數(shù)學(xué)題

1、求1 * 2 * 3 * 4 …*n的階乘

代碼如下:

 function fn(n){
           if(n == 1){
               return 1;
           }
           return n*fn(n-1);
       }
       console.log('1-20的階乘為:'+fn(20));
       console.log('1-10的階乘為:'+fn(10));
       console.log('1-5的階乘為:'+fn(5));

打印結(jié)果為:

2、 求斐波那契數(shù)列

斐波那契數(shù)列,又稱為“兔子數(shù)列”,指的是這樣一個數(shù)列:、1、1、2、3、5、8、13、21、34、……,即第三項的值為前兩項的加和。用戶輸入一個n,就可以得到該位置的數(shù)。

代碼如下:

function fb(n){
            if(n === 1 || n === 2){
                return 1;
            }
            return fb(n-1) + fb(n-2);
        }
       console.log('第3項斐波那契數(shù)列值為:'+fb(3));
       console.log('第10項斐波那契數(shù)列值為:'+fb(10));

打印結(jié)果為:

三、利用遞歸求對應(yīng)數(shù)據(jù)對象

根據(jù)id返回對應(yīng)的數(shù)據(jù)對象

有如下所示的對象:

        var date = [{
            id:1,
            name:'電器',
            goods:[{
                id: 11,
                gname:'手機'
            },{
                id: 12,
                gname: '電腦'
            }]
        },{
            id:2,
            name:'服飾',
            goods:[{
                id : 21,
                gname:'褲子'
            },{
                id : 22,
                gname : '外套'
                }]
        },{
            id : 3,
            name: '食品'
                }];

現(xiàn)在要通過輸入id返回對應(yīng)的數(shù)據(jù)對象。

首先我們可以通過for...Each()來遍歷數(shù)組,得到每一項值,如下所示:

function getId(array,id){
                    array.forEach(function(value){
                        console.log(value);
                    })
                }
                getId(date,1);

打印的結(jié)果為:

這時,如果我們想要獲得id為1的對象的值,可以這樣操作:

function getId(array,id){
                    array.forEach(function(value){
                       if(value.id === id){
                           console.log(value);
                       }
                    })
                }
                getId(date,1);

打印結(jié)果為:

可以得到,但是如果我們想要得到id為11的對象的值呢?很明顯,直接調(diào)用該函數(shù)是不可行的,因為我們通過for...Each只是遍歷得到了最外層的對象的值,而內(nèi)層的具體分類并沒有得到,這時,我們就可以通過遞歸調(diào)用getId(array,id)函數(shù),來獲取里層對象的值。

操作如下:

 function getId(array,id){
                    array.forEach(function(value){
                       if(value.id === id){
                           console.log(value);
                       }else if(value.goods && value.goods.length !=0){
                            getId(value.goods,id);
                       }

                    })
                }
                // getId(date,1);
                getId(date,11);

打印的結(jié)果為:

到此這篇關(guān)于JavaScript遞歸詳述的文章就介紹到這了,更多相關(guān)JavaScript遞歸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序 選項卡的簡單實例

    微信小程序 選項卡的簡單實例

    這篇文章主要介紹了微信小程序 選項卡的簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 微信小程序 wx:key詳細(xì)介紹

    微信小程序 wx:key詳細(xì)介紹

    這篇文章主要介紹了微信小程序 wx:key詳細(xì)介紹的相關(guān)資料,并附簡單代碼實例,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下
    2016-10-10
  • svgicon組件使用方法示例詳解

    svgicon組件使用方法示例詳解

    這篇文章主要為大家介紹了svgicon組件使用方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • JS代碼檢查工具ESLint介紹與使用方法

    JS代碼檢查工具ESLint介紹與使用方法

    ESLint是一個JavaScript代碼靜態(tài)檢查工具,可以檢查JavaScript的語法錯誤,提示潛在的bug,本文將詳細(xì)介紹ESLint的使用方法
    2020-02-02
  • js的一些潛在規(guī)則示例分析

    js的一些潛在規(guī)則示例分析

    這篇文章主要為大家介紹了js的一些潛在規(guī)則示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • JSON與JS對象的區(qū)別與對比

    JSON與JS對象的區(qū)別與對比

    JSON是什么?JSON是JS的一種簡單數(shù)據(jù)格式,JSON是JavaScript原生格式,它是一種嚴(yán)格的js對象的格式,JSON的屬性名必須有雙引號,如果值是字符串,也必須是雙引號
    2017-03-03
  • 微信小程序 loading 組件實例詳解

    微信小程序 loading 組件實例詳解

    這篇文章主要介紹了微信小程序 loading 組件實例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Javascript繼承(上)——對象構(gòu)建介紹

    Javascript繼承(上)——對象構(gòu)建介紹

    Javascript中除了基本數(shù)據(jù)(Undefined、Null、Boolean、Number、String),其他都是對象(Object)
    2012-11-11
  • Project?Reference優(yōu)化TypeScript編譯性能示例

    Project?Reference優(yōu)化TypeScript編譯性能示例

    這篇文章主要為大家介紹了Project?Reference優(yōu)化TypeScript編譯性能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • JS網(wǎng)頁repaint與reflow?的區(qū)別及優(yōu)化方式

    JS網(wǎng)頁repaint與reflow?的區(qū)別及優(yōu)化方式

    這篇文章主要為大家介紹了JS網(wǎng)頁repaint與reflow?的區(qū)別及優(yōu)化方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09

最新評論

武陟县| 汨罗市| 弥勒县| 伊宁县| 平顶山市| 拉萨市| 柘城县| 博罗县| 云南省| 岗巴县| 张掖市| 靖江市| 望都县| 九寨沟县| 团风县| 东城区| 林州市| 沽源县| 苍南县| 静海县| 筠连县| 明溪县| 菏泽市| 涞源县| 萍乡市| 高雄县| 商洛市| 寻乌县| 乡城县| 西盟| 黄大仙区| 怀安县| 深泽县| 灯塔市| 寿光市| 中阳县| 略阳县| 驻马店市| 新竹县| 阿尔山市| 泌阳县|