什麼是遞迴
在有基線條件的情況下迭代自身,即是在有結束條件的情況下函式不斷呼叫自己。如果沒有結束條件則會導致出現死迴圈,程式崩潰。就像準備高考或者考研複習時,我們需要每天重複相似的學習內容,但我們不可能一直保持這種狀態,必然有停止學習的時間,那就是高考或者考研結束時,這個迴圈既可以停止,如果不給自己設定乙個停止條件,那就會導致一直重複下去,無法停止,最後崩潰
遞迴的作用
遞迴可以使程式變得更加通俗易懂,更容易理解。但相對迴圈而言程式的效能可能會降低。在決定使用迴圈還是遞迴時,需要看你更需要效能還是可讀性。
遞迴的條件
要寫乙個遞迴程式必須包含兩個條件:基線條件和遞迴條件
基線條件即是程式結束的條件,當滿足什麼條件時程式會停止呼叫自己
遞迴條件時函式呼叫自己
棧
棧(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"
)
先建立三個簡單的函式,並暫時認定這個棧用於儲存多個函式變數,被稱為呼叫棧。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函式的定義。輸入格式 共一行,為乙個正整數。輸出格式 ...