什麼是遞歸?算法
遞歸式方法能夠被用於解決不少的計算機科學問題,所以它是計算機科學中十分重要的一個概念。
絕大多數編程語言支持函數的自調用,在這些語言中函數能夠經過調用自身來進行遞歸。
計算理論能夠證實遞歸的做用能夠徹底取代循環,所以在不少函數編程語言(如Scheme)中習慣用遞歸來實現循環。
遞歸的強大之處在於它容許用戶用有限的語句描述無限的對象。
所以,在計算機科學中,遞歸能夠被用來描述無限步的運算,儘管描述運算的程序是有限的。
下面是對Python遞歸函數的簡單瞭解:
# 相似與棧的先進後出模式
# 遞歸的兩個必要條件 # 1.要有遞推關係 # 2.要有臨界 def digui(num): print('$'+str(num)) # 臨界值 if num >0: # 這裏用的是調用自己的函數(遞推關係) digui(num-1) else: print('='*20) print(num) digui(3)
輸出結果爲:
$3 $2 $1 $0 ==================== 0 1 2 3
#----------------漢諾塔-----------------# # 若是有n個圓盤,所需移動的步數爲 2^n-1 i = 0 # 定義一個函數給4個參數n是圓盤的個數,a表明A柱子,b,c 函數裏面的是形式參數 def move(n,a,b,c): # 把變量i全局化,若是不全局化,只可訪問讀取不能進行操做修改 global i if n==1: i += 1 print('移動第',i,'次',a,'-->',c) else: # 1.把A柱上n-1個圓盤移動到B柱上 move(n-1,a,c,b) # 傳的纔是實際參數 # 2.把A柱上最大的移動到C柱子上 move(1,a,b,c) # 3.把B柱子上n-1個圓盤移動到C柱子上 move(n-1,b,a,c) move(4,'A','B','C')
輸出結果爲:編程語言
移動第 1 次 A --> B 移動第 2 次 A --> C 移動第 3 次 B --> C 移動第 4 次 A --> B 移動第 5 次 C --> A 移動第 6 次 C --> B 移動第 7 次 A --> B 移動第 8 次 A --> C 移動第 9 次 B --> C 移動第 10 次 B --> A 移動第 11 次 C --> A 移動第 12 次 B --> C 移動第 13 次 A --> B 移動第 14 次 A --> C 移動第 15 次 B --> C