在python中,如何用遞歸函數來實現循環語句的功能?

一:遞歸函數(recursion)

  1. 函數直接或間接的調用自身
  • 示例(直接調用自身):

import time

def story():

time.sleep(1)

print(“從前有座山”)

print(“山上有座廟”)

print(“廟裏有個老和尚”)

story() #直接調用自身

story()

  • 說明:遞歸本身就是一種循環,首先在函數外部調用了函數stroy,間隔一秒鐘的時候,開始講故事,接着最後一條輸出語句輸入完畢以後,再調用story(),一直循環下去,如果不加time.sleep(),程序立馬就會執行完,而且還會出現一個RecursionError報錯(超出了遞歸的最大深度)。代碼如下圖:

2. 函數間接調用自身的遞歸

def fa():

fb()

def fb()

fa()

fa()

print(‘’遞歸結束’’)

說明:此例中首先調用了函數fa(),在函數fa()裏面又間接調用了函數fb(),函數fb()又調用了函數fa(),依次循環,永遠都不會輸出後面的print語句。

3. 遞歸用法說明:

遞歸一定要控制遞歸的層數,當符合某一條件時要終止遞歸。

幾乎所有的遞歸都能用while循環來代替。

示例:

def fx(n):

print(‘遞歸進入第’, n, ‘層)

if n == 3:

return

fx(n + 1)

print(‘遞歸退出第’, n, ‘層)

fx(1)

print(‘程序運行結束’)

  • 說明:先把實參的值1傳給形參n,打印輸出第一條print語句,再判斷n是否等於3,如果不等於,執行fx(n+1),此時的形參n的值爲2,再輸出第一條print語句,執行fx(n + 1),把結果3傳果n,打印輸出第一條print語句, 再判斷n是不是等於3,如果是,返回上一次函數的調用(n=2),並打印輸出遞歸退出第2層,接着再返回第一層……代碼如下圖:

4. 遞歸的優缺點

  • 優點:

遞歸可以把問題簡單化,讓思路更清晰,代碼更簡潔

  • 缺點:

遞歸因系統環境影響大,當遞歸深度太大時,可能會出現不可知的後果。

  • 示例1:

用遞歸的方法求:1+2+3……+98+99+100的和。

  • 說明:

假設實參爲100,把100傳給形參,設置遞歸的終止點,如果小於等於1,返回終止點1,遞歸結束,否則返回兩個的和(上一個數,加上下一個數(參數減1)的和。)如:return 100 + 99;代碼如下圖:

示例2:求5的階乘。

說明:5的階乘等於5 X 4 X 3 X 2 X1,代碼如下圖:、


推薦我們的Python學習扣qun:784758214 ,看看前輩們是如何學習的!從基礎的python腳本到web開發、爬蟲、django、數據挖掘等【PDF,實戰源碼】,零基礎到項目實戰的資料都有整理。送給每一位python的小夥伴!每天都有大牛定時講解Python技術,分享一些學習的方法和需要注意的小細節,點擊加入我們的 python學習者聚集地

總結:遞歸可以直接或者是間接調用,遞歸本身是一種循環,可在內部不用循環語句,實現循環語句的功能,遞歸通常用在遍歷查找文件中(如查找某個文件是否存在這個文件夾中,這時候我們就可以使用遞歸的方法:遍歷文件名稱、大小,一個一個的找。)而用循環卻無法實現,因爲無法確定循環的次數。大家要注意一點,python規定遞歸的深度是1000,所以我們在做數學運算加法等的時候,只能求1000以內的數,不能超過1000。

發佈了54 篇原創文章 · 獲贊 68 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章