python使用遞迴實現斐波拉契數列

2021-08-28 15:09:06 字數 2379 閱讀 2064

什麼是遞迴

​ 在有基線條件的情況下迭代自身,即是在有結束條件的情況下函式不斷呼叫自己。如果沒有結束條件則會導致出現死迴圈,程式崩潰。就像準備高考或者考研複習時,我們需要每天重複相似的學習內容,但我們不可能一直保持這種狀態,必然有停止學習的時間,那就是高考或者考研結束時,這個迴圈既可以停止,如果不給自己設定乙個停止條件,那就會導致一直重複下去,無法停止,最後崩潰

遞迴的作用

​ 遞迴可以使程式變得更加通俗易懂,更容易理解。但相對迴圈而言程式的效能可能會降低。在決定使用迴圈還是遞迴時,需要看你更需要效能還是可讀性。

遞迴的條件

​ 要寫乙個遞迴程式必須包含兩個條件:基線條件遞迴條件

​ 基線條件即是程式結束的條件,當滿足什麼條件時程式會停止呼叫自己

​ 遞迴條件時函式呼叫自己

棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

呼叫棧
計算機內部使用被稱為呼叫棧的棧

def

greet

(name)

:print

("hello, %s !"

%name)

greet2(name)

print

("getting ready to say bye"

) bye(

)def

greet2

(name)

:print

("how are you, %s ?"

%name)

defbye()

:print

("ok bye"

)

先建立三個簡單的函式,並暫時認定print不是函式,首先當程式先呼叫greet函式時並且name=jack時,計算機首先會給該函式呼叫分配一塊記憶體,並將name的值存放在這一塊記憶體中。當程式執行到greet2時,計算機會使用棧表示這些記憶體塊,然後將greet2的記憶體塊放在greet的記憶體塊上。當函式greet2執行完成後會將該記憶體塊彈出(greet2函式在執行時greet是處於等待執行狀態,未完成狀態),彈出後程式會回到greet函式並從上次離開的地方繼續執行,當執行到bye函式時,在棧頂繼續新增的了函式bye的記憶體塊,當bye執行完成後改記憶體塊又會彈出回到greet函式中去

這個棧用於儲存多個函式變數,被稱為呼叫棧。

遞迴呼叫棧

​ 在遞迴函式中也使用呼叫棧。在每次遞迴呼叫時都會往棧頂新增記憶體塊,直到遞迴呼叫停止時,開始彈出記憶體塊。即每當函式執行到非本函式內容時都會暫停執行,往棧頂新增新的記憶體塊,等待棧頂的記憶體塊彈出

遞迴完成斐波拉契數列

​ 斐波拉契數列(fibonacci sequence)是指這樣的乙個數列:0,1,1,2,3,5,8,13,21…

​ 前兩個數的和等於下乙個數

"""

遞迴寫出斐波拉契數列

斐波拉契數列:1,1,2,3,5,8。。。

"""def

fibonacci

(i):

""" 輸出指定位置的斐波拉契數

"""if i ==

1or i ==2:

return

1elif i ==0:

return

0else

:# sum = fibonacci(i-2) + fibonacci(i-1)

# print(sum) # 必須通過return返回結果,否則資料無法傳輸,導致結果報錯,

return fibonacci(i-2)

+ fibonacci(i-1)

if __name__ ==

"__main__"

:print

(fibonacci(5)

)# 列印指定位置的數

# 列印指定數量的斐波拉契數列

l =for i in

range(5

):)print

(l)

斐波拉契數列,遞迴實現

1,1,2,3,5,8 規律是當前數為前兩個數的和。比如生兔子問題就是這樣 第一天只有乙個小兔子 1 第二天小兔子長成大兔子並且懷孕 1 第三天大兔子生下乙個小兔子 2 第四天小兔子長大前乙個大兔子又生下乙個小兔子 3 第五天兩個成年兔子分別生下了乙個兔子,前一天生下的兔子又上大 5 叫求第100天...

Python實現斐波拉契數列

斐波拉契數列 斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波那契數列以如下被以遞推的方法...

斐波拉契數列 Python

斐波拉契數列 這個數列從第三項開始,每一項都等於前兩項之和 題目內容 已知斐波拉契數列的前兩項都是1,我們定義求斐波拉契數列的第n項 n 50 的函式為fbnq,程式主體如下 n int input print fbnq n 請補充完成對fbnq函式的定義。輸入格式 共一行,為乙個正整數。輸出格式 ...