我們把乙個直接呼叫自己或通過一系列的呼叫語句間接地呼叫自己的函式,稱做遞迴函式
//版本1:迭代版本
func fbi1(i int) int
return arr[i]
}}
//版本2:遞迴版本
func fbi2(i int) int
}
迭代使用的是迴圈結構,遞迴使用的是選擇結構遞迴使程式的結構更清晰、更簡潔、更容易理解,從而減少讀懂**的時間
但是大量的遞迴呼叫會建立函式的副本,會耗費大量的時間和記憶體,迭代則不需要反覆呼叫函式和占用額外的記憶體
視不同情況選擇不同的**實現方式
遞迴過程分為前行和退回階段,編譯器使用棧實現遞迴;前行階段,每一層遞迴,函式的區域性變數、引數值以及返回位址都被壓入棧,在退回階段,位於棧頂的區域性變數、引數值和返回位址被彈出,恢復了呼叫的狀態
佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表
先進先出(first in first out),簡稱fifo
我們把佇列的這種頭尾相接的順序儲存結構稱為迴圈佇列
佇列的鏈式儲存結構,就是線性表的單鏈表,只能尾進頭出
迴圈佇列是事先申請好空間,使用期間不釋放;鏈佇列,每次申請和釋放階段存在一些時間開銷
迴圈佇列必須有乙個固定長度,有儲存元素個數和空間浪費的問題;空間上,鏈佇列更加靈活
總結:可以確定佇列長度最大值的情況下,建議用迴圈佇列,如果無法預估佇列長度,則用鏈佇列
《大話資料結構》第4章 棧與佇列
棧與佇列 棧 佇列都是特殊的線性表 受限表 只不過對插入和刪除操作做了限制 沒有修改操作 這些操作只能限制在表的一端 what棧 棧是限定僅在表尾 這裡的表尾是指棧頂,而不是棧底 進行插入和刪除操作的線性表 what佇列 佇列是只允許在表的一端進行插入操作,而在表的另一端進行刪除操作的線性表 棧 佇...
大話資料結構4之棧與佇列
1.棧是限定僅在表尾進行插入和刪除操作的線性表。佇列是只允許在一端進行插入操作 而在另一端進行刪除操作的線性表。2.我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料元素的棧稱為空棧。棧又稱為後進先出的線性表,簡稱lifo結構。棧的插入操作,叫做進棧,也稱壓棧 入...
大話資料結構 棧與佇列
文章知識點來至於大話資料結構裡邊章節知識,這篇主要介紹棧與佇列在計算機中儲存形式,以及在某些演算法領域中對棧和佇列的相關應用。章節最後介紹了著名的逆波蘭表示式,以及通過演算法來實現該表示式的運算過程。在實現 的同時新增了流程圖。相關 原始碼請檢視文章最後。1 棧結構定義 2 棧的順序儲存 3 兩棧共...