淺談對遞歸演算法的理解……

来源:https://www.cnblogs.com/gzw-23/archive/2019/08/30/11437452.html
-Advertisement-
Play Games

遞歸: 所謂遞歸,就是既有傳遞,又有回歸,與其說是傳遞與回歸,初學不如理解是一種 “循序遞進”與“規律約束”。 為什麼這樣說,因為遞歸演算法相比較於迴圈在代碼結構方面個人認為更加簡潔清晰,清晰易懂,遞歸註重的是一種有序的規律,所以在每個程式開始之前,我們只要能找到一個使程式循序遞進的規律;並且在整個過 ...


遞歸:

        所謂遞歸,就是既有傳遞,又有回歸,與其說是傳遞與回歸,初學不如理解是一種  “循序遞進”與“規律約束”。

        為什麼這樣說,因為遞歸演算法相比較於迴圈在代碼結構方面個人認為更加簡潔清晰,清晰易懂,遞歸註重的是一種有序的規律,所以在每個程式開始之前,我們只要能找到一個使程式循序遞進的規律;並且在整個過程都在用此規律進行傳遞,但是遞歸演算法也有很大的缺點,會造成記憶體空間不足,從而形成記憶體溢出;所以針對這種缺點,就會引入“規律約束”,在每一次演算法的的開始之前,先對演算法進行一個規律約束,而這種約束可以理解為一個“歸期”;即到這個歸期不得已而為之……

 

eg:1 計算1+2+3+4+……+100的值。

function fn(n){
if(n==1)return 1;       //歸期
return n+fn(n-1);       //規律
}
console.log(fn(100));

eg:2 計算n 和 1/n!的階乘。

1. n!
function
fn(n){ if(n==1)return 1; //歸期 return n*fn(n-1); //規律 } console.log(fn(5));

2. 1/n!
function fn(n){
if(n==1)return 1;         //歸期
return 1/n*fn(n-1);         //規律
}
console.log(fn(5));

 

 eg:3 斐波拉契數列(求第n個數的數值)  

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987……
function fn(n){
if(n==1||n=2)return 1;        //歸期
return fn(n-1)+fn(n-2);         //規律
}
console.log(fn(8));
eg:4 編寫一個函數,輸入n為偶數時,調用函數求1/2+1/4+...+1/n,當輸入n為奇數時,調用函數求/1+1/3+...+1/n
function fn(n){
if(n%2==0){
if(n<=2)return 1/2;       //歸期
return 1/n+fn(n-2);       //規律
}
if(n%2!=0){
if(n==1)return 1;         //歸期
return 1/n+fn(n-2);
}
}
console.log(fn(4));

eg:5 求1!+1/2!+1/3!+...+1/n!(遞歸與迴圈的結合)

   // function fn(n) {
    //     if (n == 1) return 1;       //歸期
    //     return 1 / n * fn(n - 1);   //規律
    // }
                                        // console.log(fn(5));



// function fn1(n) { // var sum = 0; // for (i = 1; i <= n; i++) { // sum += fn(i); // } // return sum; // } // console.log(fn1(5))

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現象: MYSQL在安裝完成後,系統能正常運行,但是第二天出現瞭如下一個提示框,如下圖: 給個人人都看得懂的如下圖: 解決辦法: 這個是新版本MySQL服務自帶的一個定時任務,每天23:59:59執行的任務,我們只需要在本地系統的“任務計劃程式”中將這個定時任務幹掉就OK了。開始 -> 在 “ 搜索 ...
  • 有時候不用的指標的絕對值不能比,但是轉轉為百分比的形式就容易看出波動了,是數據分析的好用的一個分析函數20:00:24 SYS@orcl> conn scott/tiger;Connected.20:00:30 SCOTT@orcl> create table test20:01:22 2 (20:... ...
  • 如需轉載,請註明出處:Flutter學習筆記(25)--ListView實現上拉刷新下拉載入 前面我們有寫過ListView的使用:Flutter學習筆記(12)--列表組件,當列表的數據非常多時,需要使用長列表,比如淘寶後臺的訂單列表,手機通訊錄等,這些列表項數據很多,長列表也是使用ListVie ...
  • (馬蜂窩技術公眾號原創內容,ID: mfwtech) 熟悉馬蜂窩的朋友一定知道,點擊馬蜂窩 App 首頁的發佈按鈕,會發現發佈的內容已經被簡化成「圖文」或者「視頻」。 長期以來,游記、問答、攻略等圖文形式的形態一直是馬蜂窩發展的優勢所在。將短視頻提升至與圖文併列的位置,是因為對於今天的移動互聯網用戶 ...
  • 1.map組件的高度如果想要鋪滿屏幕,要是使用height:100vh樣式2.獲取位置要在app.json中標明許可權3.先使用wx.getLocation獲取自己的位置,然後再回調中使用setData方法,賦予數據給前臺頁面展示標註點 index.js index.wxml app.json ...
  • 步驟: 1.進入鬥魚直播; 2.按下f12; 3.點擊Console; 4.複製下方代碼黏貼至Console下,回車就會自動輸彈幕; 友情提醒:若想終止請在console下輸入stop()--或--按f5; 代碼如下: const area = document.getElementsByClass ...
  • 我們略過概念,直接看函數式響應式編程解決了什麼問題。 故事從下麵這個例子展開: 兩個密碼輸入框,一個提交按鈕。 密碼、確認密碼都填寫並一致,允許提交;不一致提示錯誤。 HTML 如下: 常規做法 初始版 加強版 問題: 輸入密碼時,確認密碼還是空的,出現密碼不一致錯誤提示,干擾用戶輸入。 期望: 確 ...
  • HTML 描寫 HTML是網頁語言(超文本標記語言),採用標簽格式進行編寫 HTML標簽:採用尖括弧包圍的關鍵字,通常成對出現(閉合標簽),但是也有個別非成對的(非閉合標簽) HTML文檔:一個完整的HTML編寫的文檔,可以形成一個瀏覽器可以訪問的資源網頁 如上就是最簡單的HTML文檔內容, 標簽之 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...