Python遞歸函數與斐波那契數列


定義:在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。

階乘實例

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))

遞歸效率低,當數字過大時,會很慢。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM