<strike id="cy2gs"><menu id="cy2gs"></menu></strike>
  • <del id="cy2gs"><dfn id="cy2gs"></dfn></del>
  • JavaScript之遞歸 詳解!

    2019-12-1    seo達人

    首先了解一下遞歸的定義:



    遞歸:遞歸函數自己調用自己,且函數內部必須有結束條件、否則就是一個死循環;



     遞歸案例:求 n 的階乘 (循環 || 遞歸)



    階乘公式先了解一下:







    即n的階乘 =  n(n-1)的階乘,如歸使用for循環來做這件事件就很簡單:



        //for循環

        function fact(n) {

            let end = 1;

            for (var i = 1; i <= n; i++) {

                end
    = i

            }

            return end

        }

        console.log(fact(5)) //5的階乘 120

    再看看遞歸的做法:



        //遞歸

        function fact(n) {

            if (n === 1) {

                return 1 //結束條件

            }

            return n fact(n - 1) //此處的fact函數相當于當前隊列的階乘

        }

        console.log(fact(5)) //5的階乘

    解析: 公式 n
    (n-1)!  則函數內部只需要返回 n該函數 n-1,



    即 n
    (n-1)!  == nfact(n-1)  







     看一下內部隊列順序,當形參為5時 階乘為 5
    fact(n-1),直至形參n = 1時,fact函數有了返回值 1,有了結束條件后整個函數結束自掉,返回階乘結果。



    遞歸的優點:遞歸的實現明顯要比循環簡單得多。



    遞歸的缺點:



    1、效率低:遞歸由于是函數自己掉自己,而函數調用是有時間和空間的消耗的:每一次函數調用,都需要在內存棧中分配空間以保存參數、返回地址以及臨時變量,而往棧中壓入數據和彈出數據都需要時間。



    2、性能差:調用棧可能會溢出,每次函數調用會在內存棧中分配空間,而每個進程的棧的容量是有限的,當調用的層次太多時,就會超出棧的容量,從而導致棧溢出。 



    總結:對于JavaScript而言,能用循環解決的事情、盡量不要考慮遞歸、 慎用! 


    日歷

    鏈接

    個人資料

    藍藍設計的小編 http://www.skdbbs.com

    存檔

    主站蜘蛛池模板: 国产成人精品日本亚洲| 欧美精品天天操| 精品人妻系列无码天堂| 国产精品麻豆VA在线播放| 国产美女精品一区二区三区| 精品国产污污免费网站入口在线| 国产精品国产精品国产专区不卡| 亚洲精品国产自在久久| 国产高清在线精品一本大道| 国产精品99精品无码视亚| 亚洲日韩一页精品发布| 久久久亚洲精品蜜桃臀| 国产精品 91 第一页| 精品无人区麻豆乱码1区2区 | 97久久久精品综合88久久| 自拍偷自拍亚洲精品被多人伦好爽| 久久996热精品xxxx| 国产成人亚洲精品91专区手机 | 久久这里只精品国产99热| 国产亚洲欧美精品永久| 久久国产热精品波多野结衣AV| 亚洲欧美一级久久精品| 日韩精品成人a在线观看| 久久久精品国产Sm最大网站| 精品国产香蕉伊思人在线在线亚洲一区二区 | 国产精品你懂得| 国产成人精品无码免费看| 久久亚洲私人国产精品| 久久夜色精品国产噜噜亚洲AV| 漂亮人妻被黑人久久精品| 亚洲AV永久纯肉无码精品动漫| 尤物TV国产精品看片在线| 亚洲精品第一国产综合境外资源| 亚洲麻豆精品国偷自产在线91| 麻豆国产高清精品国在线| 久99久无码精品视频免费播放| 精品国产综合区久久久久久| 精品偷自拍另类在线观看丰满白嫩大屁股ass | 91麻豆国产福利精品| 国产精品莉莉欧美自在线线| 久久精品国产精品青草app|