JavaScript遞歸應用與實踐

遞歸簡單來說就是函數內調用自生的一種方法,形如:

function foo(){foo()
}
復制代碼

下面我列舉一些常用的遞歸應用。

1. 求和,例如求1+2+3+4+...+100之和

分析如下:

sum(100)=sum(99)+100
sum(99)=sum(98)+99
...
sum(1)=sum(0)+1
復制代碼

代碼實現:

function sum(n){if(n==1) return 1return sum(n-1)+n 
}
console.log(sum(100)) // 5050
復制代碼

特意說明一下使用遞歸一定不要忽略退出條件,否則會陷入死循環。

2.求階乘 例如10!

function factorial(n) {if(n==1) return 1return factorial(n-1)*n
}
console.log(factorial(10)) // 3628800
復制代碼

3.平展組織

在實際應用之中,經常會遇到類似于組織樹結構

var tree=[{name:'jack',children:[{name:'jack2',children:[{name:'jack3'}]}]},{name:'tom',children:[{name:'tom2',children:[{name:'tom3'}]}]}...
]
復制代碼

我們往往需要對組織樹進行平展來更方便我們的開發,例如我們需要得到一個所有的名稱name數組等,采用遞歸實現如下:

var res=[]
function flatTree(arr){for(let i=0;i<arr.length;i++){   res.push({name:arr[i].name})if(arr[i].children.length!=0){return flatTree(arr[i].children)}else{continue;}}
}
tree.forEach(function(item,index){flatTree([item])
})
復制代碼

4.數據分組

例如對于數組[1,5,10,15,21,26,31,36,41,50,55,70] 每隔五秒應該要有數據,如果不是每隔五秒的數據應該劃入下一個組中,即分組后應該為

[[1,5,10,15],[21,26,31,36,41],[50,55],[70]
]
復制代碼

實現代碼如下:

unction group(data) {if(data.length==0){return false}for(let i=0;i<data.length;i++){if (data[i+1] && (data[i+1]-data[i]<5)) {continue;} else {result.push(data.splice(0,i+1))group(data)break }}return  
}
group(data)
console.log(result)
復制代碼

5. 對象復制(深拷貝)

function deepCopy(obj) {var result = Array.isArray(obj) ? [] : {};for (var key in obj) {if (obj.hasOwnProperty(key)) {if (typeof obj[key] === 'object') {result[key] = deepCopy(obj[key]);} else {result[key] = obj[key];}}}return result;
}
復制代碼

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276023.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276023.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276023.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一個好的設計師_是什么讓一個好的設計師

一個好的設計師重點 (Top highlight)The design manager role has grown considerably over the past five years. As design has been recognised as a business value-driver and organisations have increased their design maturity, we’ve seen lots more design managem…

PHP-Redis擴展安裝 error: ext/standard/php_smart_str.h: No such file or directory

在源碼編譯PHP-redis擴展時&#xff0c;遇到缺少頭文件問題【問題描述】error: ext/standard/php_smart_str.h: No such file or directory 【問題原因】PHP安裝好的頭文件目錄&#xff1a;/php/include/php/ext/standard/&#xff0c;這些頭文件&#xff0c;在php7之前的版本&…

相見恨晚的一款前端布局神器!

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天給大家推薦一款非常實用的前端頁面布局神器&#xff0c;點擊下方卡片關注我&#xff0c;或者查看源碼系列文章。頁面和布局是一門前端程序員的必修課&#xff0c;css 從來也不是停留在面試八…

IC設計前端幾本經典書籍

No.1 Writing Testbenches, Functional Verification of HDL Modelsby Janick Bergeron本書主要以HDL&#xff08;verilog/vhdl&#xff09;為例&#xff0c;詳細講述了在IC DESIGN FLOW中Verification 以及Test的設計思想、方法和技巧&#xff0c;涵概了測試的各個方面&#x…

unreal無損音樂百度云_將網易云音樂專用的無損音樂格式轉換成全平臺通用的無損格式...

前幾天發現網易云音樂的ncm格式很坑爹&#xff0c;由于網易云的部分音樂采取了這種流媒體平臺模式&#xff0c;這種格式的歌曲下載到設備本地以后只有在網易云音樂的app上面才能播放&#xff0c;而且還要在會員生效期間才能播今天網易云弄出一個ncm&#xff0c;明天百度音樂來一…

鎖升級

JavaSE1.6為了減少獲得鎖和釋放鎖帶來的性能消耗&#xff0c;引入了“偏向鎖”和“輕量級鎖”。 在JavaSE1.6中&#xff0c;鎖一共有4種狀態&#xff0c;級別從低到高依次是&#xff1a;無鎖狀態、偏向鎖狀態、輕量級鎖狀態和重量級鎖狀態&#xff0c;這幾個狀態會隨著競爭情況…

ux和ui_首先要做的— UX / UI案例研究

ux和ui休息一下&#xff01; (Get some rest!) After four weeks of four-day design sprints each week, I welcomed the opportunity to work on this 9-day design challenge. With this also being an individual project, I allocated 50% of my time on the UX process a…

微信消息模板換行符轉義問題處理

通常的微信模板&#xff1a; Hello &#xff01;\n\n Are you OK&#xff1f; ① 直接定義字符串&#xff1b; ② 數據庫中讀取&#xff1b;這里需要說明的是 數據庫讀取 的內容&#xff0c;如果直接推送&#xff0c;\n\n是沒有被轉移為換行符的。此時需要&#xff1a; $tplStr…

Vue2 徹底從 Flow 重構為 TypeScript,煥然一新!

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天分享一篇技術熱點&#xff0c;眾所周知&#xff0c;前不久vue3不打算支持IE11&#xff0c;vue2將支持composition API&#xff0c;現在vue2用ts重構&#xff0c;試問&#xff1a;還學得動嘛…

紅米note5linux刷機包__最新最全的紅米Note5ROM刷機包下載、刷機教程_紅米Note5論壇_移動叔叔...

本帖最后由 壓力山大大叔 于 2018-5-15 00:52 編輯20180513跟新全屏手勢。看最后一張載圖。1&#xff1a;先解鎖&#xff0c;刷第三方&#xff0c;都是這個流程。2非常干凈&#xff0c;只有670兆&#xff0c;刷完沒有找到瀏覽器&#xff0c;刷前下載一個瀏覽器在手機里備用。3電…

每個網頁設計者都自以為是

&#xff08;一&#xff09;垃圾還是經典網頁技術更新很快&#xff0c;一個網站的界面設計壽命僅僅2-3年而已。不管是垃圾還是精品&#xff0c;都沒有所謂的經典。經典只存在于是哪個首次成功創新性的應用。網頁設計 者不管自己的學識、技術和經驗如何&#xff0c;都自以為自己…

文件夾的拷貝

文件夾用來把文件包裹起來&#xff0c;褪去這些外衣&#xff0c;說到底拷貝文件夾也就是拷貝文件 模擬實例&#xff1a;將F:/Picture/test 文件夾 拷貝到 F:/Picture/dir文件夾 該實例中test文件夾下只包含了test.txt文件 步驟分析&#xff1a; 1.通過路徑得到File對象 2.遞歸查…

【抽獎】若川誠邀你加前端群,長期交流學習~

最近有許多讀者朋友關注了我&#xff0c;加我好友沒有來得及拉群交流。另外偷偷告訴你&#xff1a;公眾號回復 411&#xff0c;參與抽獎&#xff0c;送極客時間100元以內的課程&#xff0c;今晚八點開獎&#xff0c;必須開獎前加了我的微信&&像是前端&&關注了我…

帝國cms重置管理員_重新設計《紐約時報》 CMS飛行員

帝國cms重置管理員1.什么是飛行員&#xff1f; (1. What Is Pilot?) For 10 weeks, I joined The New York Times’s Story Formats team as a Product Design Intern. Partnered with technology intern Shormie Faruque, we were tasked with redesigning Pilot.大約十個星期…

微信小程序開發 Request Headers: Provisional headers are shown

在微信小程序開發的時候&#xff0c;寫了兩個API請求&#xff1a; 請求A://請求Awx.request({url: https://wx.baidu.com/api/wx/getBallByDate,method: POST,dataType: json,data: {date: that.data.curDate},header: {content-type: application/json},success: function(dt…

昆山萬象匯機器人_昆山十鎮,在售新盤匯總

陸家建偉國際汽車城&#xff0c;均價 7500 元/㎡美吉特家居廣場&#xff0c;均價 17000 元/㎡美吉特燈都&#xff0c;均價 17000 元/㎡花橋綠地象嶼蘇河公園&#xff0c;均價 22950 元/㎡凱德都會新峰&#xff0c;均價 21500 元/㎡越洋國際&#xff0c;均價 18000 元/㎡浦西玫瑰…

Mini 容器學習筆記6——組件的獲取(應用)

1. 通過組件Id獲取組件實例&#xff1a; [Test]public void GetByIdTest(){ServiceRegistry.Register<Person>("person");var person ServiceLocator.Get<IPerson>("person");Assert.IsTrue(person ! null);var person2 ServiceLocator.Get&…

JavaScript ES2021 最值得期待的 5 個新特性解析

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天分享一篇關于ES2021的5個新特性。點擊下方卡片關注我&#xff0c;或者查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列在寫本文時&#xff0c;本文提到的新的 JavaScript …

uniapp延遲執行_uniapp微信小程序真機調試點擊按鈕有1秒延遲

詳細問題描述(DCloud產品不會有明顯的bug&#xff0c;所以你遇到的問題大都是在特定環境下才能重現的問題&#xff0c;請仔細描述你的環境和重現方式&#xff0c;否則DCloud很難排查解決你的問題)[內容]開發uniapp小程序項目時,在頁面中點擊按鈕后, 數據即時更新, 視圖層延遲1秒…

latex排版基礎_排版基礎分類

latex排版基礎重點 (Top highlight)There are many parts to creating a beautiful, functional, memorizing design. That’s what all User Experience designers set out to do. You need to consider your users, strategy, features, content, color, and so much more. A…