python之遞歸實現

来源:http://www.cnblogs.com/zhangqigao/archive/2016/05/05/5462880.html
-Advertisement-
Play Games

一、遞歸函數 概念:遞歸演算法是一種直接或者間接的調用自身演算法的過程。在電腦編寫程式中,遞歸演算法對解決一大類問題是十分有效的。 特點: ①遞歸就是在過程或者函數里調用自身。 ②在使用遞歸策略時,必須有一個明確的遞歸條件,稱為遞歸出口。 ③遞歸演算法解題通常顯得很簡潔,但遞歸演算法解題的效率較低。所以一般 ...


一、遞歸函數

概念:遞歸演算法是一種直接或者間接的調用自身演算法的過程。在電腦編寫程式中,遞歸演算法對解決一大類問題是十分有效的。

特點:

①遞歸就是在過程或者函數里調用自身。

②在使用遞歸策略時,必須有一個明確的遞歸條件,稱為遞歸出口。

③遞歸演算法解題通常顯得很簡潔,但遞歸演算法解題的效率較低。所以一般不倡導使用遞歸演算法設計程式。

④在遞歸調用的過程當中系統的每一層的返回點、局部變數等開闢了棧來存儲。遞歸函數次數過多容易造成棧溢出等。

   所以一般不倡導用遞歸演算法設計程式。

要求:

遞歸演算法所體現的"重覆"一般有三個條件:

①每次在調用規模上都有所縮小(通常是減半)。

②相鄰兩次重覆之間有緊密的聯繫,前一次要為後一次做準備(通常前一次的輸出就作為後一次的輸入)。

③在問題的規模極小時必須用直接接觸解答而不再進行遞歸調用,因而每次遞歸調用都是有條件的(以規模未達到直接解答的大小為條件),

   無條件的遞歸調用將會成為死迴圈而不能正常結束。

 1 """非遞歸方式呈現"""
 2 sum = 0
 3 for obj in range(1,101):
 4     sum+=obj
 5 print sum
 6 
 7 """"1+2+3+...+100"""
 8 def foo(n):
 9     if n>0:return n+foo(n-1)
10     if n<=0:return 0
11 print foo(100)
12 
13 """階乘"""
14 def fac(n):
15     if n==0 or n==1:
16         return 1
17     else:
18         return n*fac(n-1)
19 print fac(10)   

遞歸演算法一般用於解決三類問題:
(1)數據的定義是按遞歸定義的。(比如Fibonacci函數)
(2)問題解法按遞歸演算法實現。(回溯)
(3)數據的結構形式是按遞歸定義的。(比如樹的遍歷,圖的搜索,二分法查找等)


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

-Advertisement-
Play Games
更多相關文章
  • 我們經常會在後臺定義一個變數,然後在用<%=變數名%>這種方式去獲取,但是有時候<head></head>裡面獲取變數的時候,有時候會獲取不到是怎麼回事呢 前臺: <head runat="server"> <%=test%> </head> 後臺: public partial class Org ...
  • 我 們知道並行編程模型兩種:一種是基於消息式的,第二種是基於共用記憶體式的。 前段時間項目中遇到了第二種 使用多線程開發並行程式共用資源的問題 ,今天以實際案例出發對.net里的共用記憶體式的線程同步機製做個總結,由於某些類庫的應用屬於基礎,所以本次不對基本使用做出講解,基本使用 MSDN是最好的教程。 ...
  • 用 Entity Framework 進行 增,刪,改。都是基於Model進行的,且Model都是有狀態追蹤的。這樣Entity Framework才能正常增,刪,改。 有時候,要根據某個欄位,批量更新或者刪除數據,用Entity Framework就會顯得很是繁瑣,且不高效。 Entity Fra ...
  • UDP特點: 面向無連接,把數據打包發過去,收不收得到我不管 數據大小有限制,一次不能超過64k,可以分成多個包 這是個不可靠的協議 速度很快 視頻直播,凌波客戶端,feiQ都是UDP協議 TCP特點: 面向連接,對方必須在 三次握手完成連接,我:在嗎;你:我在;我:我知道了 大數據量傳輸 速度稍慢 ...
  • 網路通信的步驟, 1.找到對方的ip 2.數據發送到對方指定的應用程式上,為了標識這些應用程式,用數字進行標識,這個數字就是埠 3.定義通信規則,這個規則就稱為協議 國際組織定義了通用協議 TCP/IP 網路模型 OSI參考模型 網路分成7層,應用層 ==> 表示層 ==> 會話層 ==> 傳輸層 ...
  • 今天我們來介紹一下C語言操作資料庫的方法,這裡我們使用的是ODBC方式。環境是WIN7+VC6。其他環境也差不多,具體情況具體分析。 首先是環境的配置以及數據源的添加。這裡就不去解釋了,相關資料網上有很多。需要註意的是這裡不可以直接使用控制面板中的ODBC,我們需要打開C:\Windows\SysW ...
  • import java.util.ArrayList;import java.util.Scanner; /* * 題目描述: * 讀入數據string[ ],然後讀入一個短字元串。要求查找string[ ]中和短字元串的所有匹配,輸出行號、匹配字元串。 * 匹配時不區分大小寫,並且可以有一個用中括 ...
  • 全文純手打,不喜勿噴~ OOP封裝 //封裝一個類:用來管理普通人的特性和行為 //1、類的概念:人類在認識客觀世界時,發現某些事物具有共同特性,共同結構,共同行為。 // 為了方便,我們就將它們集合起來,並抽象出一個概念類管理它們,這個概念就是類。 //2、類的組成:標準類由:實例變數、構造器、設 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...