Python中的函數遞歸思想,以及對比迭代和遞歸解決Fibonacci數列


什么是遞歸?簡單的說就是:函數自身調用自身。

 

“普通程序員用迭代,天才程序員用遞歸”

 

雖然遞歸 在運行時會不斷出棧壓棧,調用底層的寄存器,造成空間上的占用以及時間上的緩慢,

但在一些算法上面仍然是遞歸很實用

 

但需要注意的是:

#遞歸是自己調用自己 很消耗時間,還會有消耗空間的危險,所以遞歸遞歸一定要知道“歸去來兮”

#所謂“歸去來兮”就是指遞歸的兩個原則:
#1.調用了函數自身
#2.設置了自身正確的返回值 (必須有一個正確的返回停止條件,不能無限下去)

 

舉簡單的例子

 

 

下面是用迭代和遞歸實現的階乘的對比:

#用循環函數實現階乘:
def factorial(n):
    for i in range(1,n):
        n *= i
    return n

#遞歸版本的階乘實現:
def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

下面是用迭代和遞歸實現的Fibonacci數列的對比:

# Fibonacci 數列的遞歸實現:
 
 #1.用迭代的方式實現
def Fibonacci(n):
    n1 = 1
    n2 = 1
    n3 = 2
    if n < 0:
        return -1
        print('Error,please enter a correct month...')
    elif n == 1:
        return n1
    elif n == 2:
        return n2
    else:
        for i in range(3,n+1):
            n3 = n2 + n1
            n1 = n2
            n2 = n3
        return n3

 #2.用遞歸的方式實現
def fab(n):
    if n < 1:
        print('輸入有誤...')
        return -1
    elif n == 1 or n == 2:
        return 1
    else:
        return fab(n-1) + fab(n-2)
    

 


免責聲明!

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



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