**單元一 : 遞迴** 遞迴與迴圈的差異 : 遞迴 迴圈 特性 程式精簡 冗長 易理解 不易 表達力更加 較差 時間 執行效率差 較佳 空間 較省空間(code space) 較耗空間(code space) 須系統stack支援 不須 暫存變數較少 較多 遞迴的應用及經典題型 : binary search、河內塔、費式數列、兩數之間差值最小的公因數。 **單元二 : 抽象化** 物件導向 : 是種具有物件概念的程式設計典範,同時也是一種程式開發的抽象方針。 Class(類別) : 定義對一件事物的抽象特點,也包含資料的形式以及操作方法。 Encapsulation(封裝) : 將物件的內部資料隱藏起來,只能透過物件所提供的method去取得或更改內部資料。 Inheritance(繼承) : 子類別可以繼承父類別原有的屬性,也可以新增自己特有的屬性。 Polymorphism(多型) : 多個相同的方法名稱,傳入不同的參數,會執行不同的敘述(包含overloading以及overriding)。 Overloding : 在相同類別中,利用參數不同的關係,去判斷相同名稱且對應的函示。 Overriding : 覆寫父類別中的函式。 Constructor : 要到一塊記憶體空間,且初步定義class內需要什麼樣的內容。 Destructor : 清空並釋放物件先前建立或是佔用的記憶體資源。 將資料模組化的好處 : 易找出錯誤點、易閱讀、易撰寫、易修改。 例外處理 : 利用try catch去找出是哪一類的錯誤,間接去做更改或是做出相對應的動作。 **單元三 : 鏈結串列** Pointers : 紀錄記憶體中的位址,也可以利用記憶體中的位址,求出所要的值。(利用delete語法去更新用不到的記憶體) Arrays vs Linked List 1. Array-based lists use an implicit ordering scheme; pointer-based lists use an explicit ordering scheme 2. Arrays enable direct access of an element , while Linked lists require a traversal 3. Increasing the size of an array involves copying 鏈結串列種類 : 單向鏈結 : 開頭為head指向第一個節點,每個節點包含資料,和下一個節點的記憶體位置,如果不為環狀,最後一個節點會連向null。 雙向鏈結 Doubly Linked List 開頭為head指向第一個節點,每個節點中包含資料,上一個節點指標和下一個節點指標,如果不為環狀,最後一個節點會連向null。