摘要:調(diào)用自身的函數(shù)稱為遞歸函數(shù)缺點遞歸占用的內(nèi)存和資源比較多,同時難以實現(xiàn)和維護。優(yōu)點在處理之類的樹形結(jié)構(gòu)數(shù)據(jù)時,非常適合用遞歸。案例數(shù)字的階乘通過乘以進行計算獲取存在某個字段的節(jié)點某個數(shù)或者遞歸實現(xiàn)數(shù)組轉(zhuǎn)樹結(jié)構(gòu)調(diào)用
調(diào)用自身的函數(shù)稱為遞歸函數(shù)
缺點:遞歸占用的內(nèi)存和資源比較多,同時難以實現(xiàn)和維護。
優(yōu)點:在處理DOM之類的樹形結(jié)構(gòu)數(shù)據(jù)時,非常適合用遞歸。
案例 數(shù)字 n 的階乘通過乘以 1 2 3 *... n 進行計算var f = function (x) { if (x === 1) { return 1 } else { return x * f(x - 1) } } const result = f(n)獲取存在某個字段的節(jié)點
let new_array = [] function _getChilds(data){ if(data.ObjType == "某個數(shù)"){ new_array.push(data) } if(data.Childs && data.Childs.length > 0){ getChilds(data.Childs) } } function getChilds(childData){ for(let i = 0; i < childData.length; i++){ _getChilds(childData[i]) } // 或者 // childData.map(item => _getChilds(item)) }js遞歸實現(xiàn)數(shù)組轉(zhuǎn)樹結(jié)構(gòu)
const jsonArr = [ {name:"a",id:1,pid:0}, {name:"b",id:2,pid:1}, {name:"c",id:3,pid:1}, {name:"d",id:4,pid:2}, {name:"e",id:5,pid:2} ] function fn(data, pid) { let result = [] let temp for (let i = 0; i < data.length; i++) { if (data[i].pid == pid) { let obj = { "name": data[i].name, "id": data[i].id } temp = fn(data, data[i].id) if (temp.length > 0) { obj.children = temp } result.push(obj) } } return result } //調(diào)用 const result = fn(jsonArr,0)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/91328.html
摘要:專題系列第十八篇,講解遞歸和尾遞歸定義程序調(diào)用自身的編程技巧稱為遞歸。然而非尾調(diào)用函數(shù),就會創(chuàng)建多個執(zhí)行上下文壓入執(zhí)行上下文棧。所以我們只用把階乘函數(shù)改造成一個尾遞歸形式,就可以避免創(chuàng)建那么多的執(zhí)行上下文。 JavaScript 專題系列第十八篇,講解遞歸和尾遞歸 定義 程序調(diào)用自身的編程技巧稱為遞歸(recursion)。 階乘 以階乘為例: function factorial(n...
摘要:一旦我們滿足了基本條件值為,我們將不再調(diào)用遞歸函數(shù),只是有效地執(zhí)行了。遞歸深諳函數(shù)式編程之精髓,最被廣泛引證的原因是,在調(diào)用棧中,遞歸把大部分顯式狀態(tài)跟蹤換為了隱式狀態(tài)。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 關(guān)于譯者:這是一個流淌著滬江血液的純粹工程:認真,是 HTML 最堅實的梁柱;...
摘要:二項目中用到的幾個經(jīng)典的遞歸求的和分析假設(shè)遞歸函數(shù)已經(jīng)寫好為,即,就是求的和。遞歸函數(shù)實現(xiàn)每天凌晨定時啟動定時器執(zhí)行代碼分析假設(shè)遞歸函數(shù)已經(jīng)寫好了。 一、遞歸的概念 在程序中函數(shù)直接或者間接調(diào)用自身的一種方法,就叫做遞歸。它通常把一個大型復(fù)雜的問題轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程中所需要的多次重復(fù)計算,大大減少了程序的代碼了。 二、...
摘要:遞歸常見問題及解決方案警惕堆棧溢出可以聲明一個全局變量來控制遞歸的深度,從而避免堆棧溢出。文章輸出計劃數(shù)據(jù)結(jié)構(gòu)與算法之美的系列文章,堅持天左右更新一篇,暫定計劃如下表。 showImg(https://segmentfault.com/img/bVbuF9e?w=900&h=500); 前言 算法為王。 排序算法博大精深,前輩們用了數(shù)年甚至一輩子的心血研究出來的算法,更值得我們學(xué)習(xí)與...
摘要:什么意思呢比如上方合并鏈表的代碼,分別明確函數(shù)的參數(shù)和返回值是什么參數(shù)是兩個合并的鏈表結(jié)點頭結(jié)點。返回值是合并后的鏈表。 Time:2019/4/9Title: Merge Two Sorted ListsDifficulty: EasyAuthor: 小鹿 題目:Merge Two Sorted Lists Merge two sorted linked lists and re...
摘要:源碼實現(xiàn)快速排序理論理解起來很容易,但經(jīng)常是實際寫代碼,無從下手,下面是我根據(jù)快排的步驟實現(xiàn)的遞歸快速排序。合并第一次快速排序的,,數(shù)組。 原理 快速排序離不開遞歸的思想,你如果不了解遞歸,可以結(jié)合我另外一篇文章來學(xué)習(xí) 算法入門之遞歸分而治之思想的實現(xiàn) 網(wǎng)上有有趣的動態(tài)圖來表示快速排序,但其實我們大部分程序員都是腦子不太好使那種,即使看了形象生動的動態(tài)圖,還是想不到具體實現(xiàn)思路。 排序...
閱讀 2857·2023-04-26 02:49
閱讀 3441·2021-11-25 09:43
閱讀 3370·2021-10-09 09:43
閱讀 2985·2021-09-28 09:44
閱讀 2446·2021-09-22 15:29
閱讀 4507·2021-09-14 18:02
閱讀 2773·2021-09-03 10:48
閱讀 3426·2019-08-30 12:47