定義:在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。
階乘實例
1 n = int(input(">>:")) 2 3 4 def f(n): 5 s = 1 6 for i in range(2, (n + 1)): 7 s *= i 8 return s 9 print(f(n))
遞歸
1 def factorial_new(n): 2 3 if n==1: 4 return 1 5 return n*factorial_new(n-1) 6 7 print(factorial_new(3))
遞歸函數的特點:
1 調用自身函數
2 有一個明顯的結束條件,問題規模相比上次遞歸有所減少
優點: 定義簡單,邏輯清晰,所有的遞歸函數都可以寫成循環的方式,但是循環的邏輯不如遞歸清晰。
但是,遞歸的效率不高,遞歸層次過多會導致棧溢出,大概1000層。
斐波那契數列
1 def fibNum(n): #斐波那契數列 2 a, b = 0, 1 3 for i in range(n): 4 b, a = a+b, b 5 return b 6 n = int(input(">>:")) 7 if n == 1: 8 print(0) 9 elif n == 2: 10 print(1) 11 else: 12 print(fibNum(n-2))
用遞歸寫
1 def fibo(n): 2 before = 0 3 after = 1 4 if n == 0 or n == 1: 5 return n 6 7 if n <= 3: 8 return 1 9 return fibo(n-1)+fibo(n-2) 10 11 print(fibo(3))
遞歸效率低,當數字過大時,會很慢。