Hello 算法 1.2.0 繁体中文 C语言 版
遞迴:“自上而下”地解決問題。將原問題分解為更小的子問題,這些子問題和原問題具有相同的形式。 接下來將子問題繼續分解為更小的子問題,直到基本情況時停止(基本情況的解是已知的)。 以上述求和函式為例,設問題 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在迴圈中模擬求和過程,從 1 走訪到 ? ,每輪執行求和操作,即可求得 ?(?) 。 ‧ 遞迴:將問題分解為子問題 ?(?) = ?+?(?−1) 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適用於子問題分解,如樹、圖、分治、回溯等,程式碼結構簡潔、 清晰 Tip 如果感覺以下內容理解困難,可以在讀完“堆疊”章節後再來複習。 那麼,迭代和遞迴具有什麼內在關聯呢?以上述遞迴函式為例,求和操作在遞迴的“迴”階段進行。這意味 typedef struct ListNode { int val; // 節點值 struct ListNode *next; // 指向下一節點的指標 } ListNode; /* 建構子 */ ListNode *newListNode(int val) { ListNode *node; node = (ListNode *) malloc(sizeof(ListNode));0 码力 | 392 页 | 18.83 MB | 9 月前3Hello 算法 1.2.0 繁体中文 Python 版
遞迴:“自上而下”地解決問題。將原問題分解為更小的子問題,這些子問題和原問題具有相同的形式。 接下來將子問題繼續分解為更小的子問題,直到基本情況時停止(基本情況的解是已知的)。 以上述求和函式為例,設問題 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在迴圈中模擬求和過程,從 1 走訪到 ? ,每輪執行求和操作,即可求得 ?(?) 。 ‧ 遞迴:將問題分解為子問題 ?(?) = ?+?(?−1) 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適用於子問題分解,如樹、圖、分治、回溯等,程式碼結構簡潔、 清晰 Tip 如果感覺以下內容理解困難,可以在讀完“堆疊”章節後再來複習。 那麼,迭代和遞迴具有什麼內在關聯呢?以上述遞迴函式為例,求和操作在遞迴的“迴”階段進行。這意味 linear_log_recur(n: int) -> int: """ 線性對數階""" if n <= 1: return 1 # 一分為二,子問題的規模減小一半 count = linear_log_recur(n // 2) + linear_log_recur(n // 2) # 當前子問題包含 n 個操作 for _ in range(n): count += 1 return count 圖 2‑130 码力 | 364 页 | 18.74 MB | 9 月前3Hello 算法 1.2.0 繁体中文 Ruby 版
遞迴:“自上而下”地解決問題。將原問題分解為更小的子問題,這些子問題和原問題具有相同的形式。 接下來將子問題繼續分解為更小的子問題,直到基本情況時停止(基本情況的解是已知的)。 以上述求和函式為例,設問題 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在迴圈中模擬求和過程,從 1 走訪到 ? ,每輪執行求和操作,即可求得 ?(?) 。 ‧ 遞迴:將問題分解為子問題 ?(?) = ?+?(?−1) 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適用於子問題分解,如樹、圖、分治、回溯等,程式碼結構簡潔、 清晰 Tip 如果感覺以下內容理解困難,可以在讀完“堆疊”章節後再來複習。 那麼,迭代和遞迴具有什麼內在關聯呢?以上述遞迴函式為例,求和操作在遞迴的“迴”階段進行。這意味 ### 串列類別 ### class MyList attr_reader :size # 獲取串列長度(當前元素數量) attr_reader :capacity # 獲取串列容量 ### 建構子 ### def initialize @capacity = 10 @size = 0 @extend_ratio = 2 @arr = Array.new(capacity) end0 码力 | 372 页 | 18.75 MB | 9 月前3Hello 算法 1.2.0 繁体中文 C++ 版
遞迴:“自上而下”地解決問題。將原問題分解為更小的子問題,這些子問題和原問題具有相同的形式。 接下來將子問題繼續分解為更小的子問題,直到基本情況時停止(基本情況的解是已知的)。 以上述求和函式為例,設問題 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在迴圈中模擬求和過程,從 1 走訪到 ? ,每輪執行求和操作,即可求得 ?(?) 。 ‧ 遞迴:將問題分解為子問題 ?(?) = ?+?(?−1) 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適用於子問題分解,如樹、圖、分治、回溯等,程式碼結構簡潔、 清晰 Tip 如果感覺以下內容理解困難,可以在讀完“堆疊”章節後再來複習。 那麼,迭代和遞迴具有什麼內在關聯呢?以上述遞迴函式為例,求和操作在遞迴的“迴”階段進行。這意味 生成陣列 nums = { 1, 2, 3, ..., n } for (int i = 0; i < n; i++) { nums[i] = i + 1; } // 使用系統時間生成隨機種子 unsigned seed = chrono::system_clock::now().time_since_epoch().count(); // 隨機打亂陣列元素 shuffle(nums0 码力 | 379 页 | 18.79 MB | 9 月前3Hello 算法 1.2.0 繁体中文 Kotlin 版
遞迴:“自上而下”地解決問題。將原問題分解為更小的子問題,這些子問題和原問題具有相同的形式。 接下來將子問題繼續分解為更小的子問題,直到基本情況時停止(基本情況的解是已知的)。 以上述求和函式為例,設問題 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在迴圈中模擬求和過程,從 1 走訪到 ? ,每輪執行求和操作,即可求得 ?(?) 。 ‧ 遞迴:將問題分解為子問題 ?(?) = ?+?(?−1) 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適用於子問題分解,如樹、圖、分治、回溯等,程式碼結構簡潔、 清晰 Tip 如果感覺以下內容理解困難,可以在讀完“堆疊”章節後再來複習。 那麼,迭代和遞迴具有什麼內在關聯呢?以上述遞迴函式為例,求和操作在遞迴的“迴”階段進行。這意味 如以下程式碼所示,鏈結串列節點 ListNode 除了包含值,還需額外儲存一個引用(指標)。因此在相同資料 量下,鏈結串列比陣列佔用更多的記憶體空間。 /* 鏈結串列節點類別 */ // 建構子 class ListNode(x: Int) { val _val: Int = x // 節點值 val next: ListNode? = null // 指向下一個節點的引用 } 40 码力 | 382 页 | 18.79 MB | 9 月前3Hello 算法 1.2.0 繁体中文 Dart 版
遞迴:“自上而下”地解決問題。將原問題分解為更小的子問題,這些子問題和原問題具有相同的形式。 接下來將子問題繼續分解為更小的子問題,直到基本情況時停止(基本情況的解是已知的)。 以上述求和函式為例,設問題 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在迴圈中模擬求和過程,從 1 走訪到 ? ,每輪執行求和操作,即可求得 ?(?) 。 ‧ 遞迴:將問題分解為子問題 ?(?) = ?+?(?−1) 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適用於子問題分解,如樹、圖、分治、回溯等,程式碼結構簡潔、 清晰 Tip 如果感覺以下內容理解困難,可以在讀完“堆疊”章節後再來複習。 那麼,迭代和遞迴具有什麼內在關聯呢?以上述遞迴函式為例,求和操作在遞迴的“迴”階段進行。這意味 class ListNode { int val; // 節點值 ListNode? next; // 指向下一節點的引用 ListNode(this.val, [this.next]); // 建構子 } 4.2.1 鏈結串列常用操作 1. 初始化鏈結串列 建立鏈結串列分為兩步,第一步是初始化各個節點物件,第二步是構建節點之間的引用關係。初始化完成後, 我們就可以從鏈結串列的頭節點出發,透過引用指向0 码力 | 378 页 | 18.77 MB | 9 月前3Hello 算法 1.2.0 繁体中文 Java 版
遞迴:“自上而下”地解決問題。將原問題分解為更小的子問題,這些子問題和原問題具有相同的形式。 接下來將子問題繼續分解為更小的子問題,直到基本情況時停止(基本情況的解是已知的)。 以上述求和函式為例,設問題 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在迴圈中模擬求和過程,從 1 走訪到 ? ,每輪執行求和操作,即可求得 ?(?) 。 ‧ 遞迴:將問題分解為子問題 ?(?) = ?+?(?−1) 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適用於子問題分解,如樹、圖、分治、回溯等,程式碼結構簡潔、 清晰 Tip 如果感覺以下內容理解困難,可以在讀完“堆疊”章節後再來複習。 那麼,迭代和遞迴具有什麼內在關聯呢?以上述遞迴函式為例,求和操作在遞迴的“迴”階段進行。這意味 class ListNode { int val; // 節點值 ListNode next; // 指向下一節點的引用 ListNode(int x) { val = x; } // 建構子 } 4.2.1 鏈結串列常用操作 1. 初始化鏈結串列 建立鏈結串列分為兩步,第一步是初始化各個節點物件,第二步是構建節點之間的引用關係。初始化完成後, 我們就可以從鏈結串列的頭節點出發,透過引用指向0 码力 | 379 页 | 18.79 MB | 9 月前3Hello 算法 1.2.0 繁体中文 C# 版
遞迴:“自上而下”地解決問題。將原問題分解為更小的子問題,這些子問題和原問題具有相同的形式。 接下來將子問題繼續分解為更小的子問題,直到基本情況時停止(基本情況的解是已知的)。 以上述求和函式為例,設問題 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在迴圈中模擬求和過程,從 1 走訪到 ? ,每輪執行求和操作,即可求得 ?(?) 。 ‧ 遞迴:將問題分解為子問題 ?(?) = ?+?(?−1) 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適用於子問題分解,如樹、圖、分治、回溯等,程式碼結構簡潔、 清晰 Tip 如果感覺以下內容理解困難,可以在讀完“堆疊”章節後再來複習。 那麼,迭代和遞迴具有什麼內在關聯呢?以上述遞迴函式為例,求和操作在遞迴的“迴”階段進行。這意味 ListNode 除了包含值,還需額外儲存一個引用(指標)。因此在相同資料 量下,鏈結串列比陣列佔用更多的記憶體空間。 /* 鏈結串列節點類別 */ class ListNode(int x) { //建構子 int val = x; // 節點值 ListNode? next; // 指向下一節點的引用 } 4.2.1 鏈結串列常用操作 1. 初始化鏈結串列 建立鏈結串列分為兩步,第一步是初0 码力 | 379 页 | 18.79 MB | 9 月前3Hello 算法 1.2.0 繁体中文 Swift 版
遞迴:“自上而下”地解決問題。將原問題分解為更小的子問題,這些子問題和原問題具有相同的形式。 接下來將子問題繼續分解為更小的子問題,直到基本情況時停止(基本情況的解是已知的)。 以上述求和函式為例,設問題 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在迴圈中模擬求和過程,從 1 走訪到 ? ,每輪執行求和操作,即可求得 ?(?) 。 ‧ 遞迴:將問題分解為子問題 ?(?) = ?+?(?−1) 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適用於子問題分解,如樹、圖、分治、回溯等,程式碼結構簡潔、 清晰 Tip 如果感覺以下內容理解困難,可以在讀完“堆疊”章節後再來複習。 那麼,迭代和遞迴具有什麼內在關聯呢?以上述遞迴函式為例,求和操作在遞迴的“迴”階段進行。這意味 鏈結串列節點類別 */ class ListNode { var val: Int // 節點值 var next: ListNode? // 指向下一節點的引用 init(x: Int) { // 建構子 val = x } } 第 4 章 陣列與鏈結串列 www.hello‑algo.com 74 4.2.1 鏈結串列常用操作 1. 初始化鏈結串列 建立鏈結串列分為兩步,第一步是初始化0 码力 | 379 页 | 18.79 MB | 9 月前3Hello 算法 1.2.0 繁体中文 JavaScript 版
遞迴:“自上而下”地解決問題。將原問題分解為更小的子問題,這些子問題和原問題具有相同的形式。 接下來將子問題繼續分解為更小的子問題,直到基本情況時停止(基本情況的解是已知的)。 以上述求和函式為例,設問題 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在迴圈中模擬求和過程,從 1 走訪到 ? ,每輪執行求和操作,即可求得 ?(?) 。 ‧ 遞迴:將問題分解為子問題 ?(?) = ?+?(?−1) 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適用於子問題分解,如樹、圖、分治、回溯等,程式碼結構簡潔、 清晰 Tip 如果感覺以下內容理解困難,可以在讀完“堆疊”章節後再來複習。 那麼,迭代和遞迴具有什麼內在關聯呢?以上述遞迴函式為例,求和操作在遞迴的“迴”階段進行。這意味 陣列(儲存串列元素) #capacity = 10; // 串列容量 #size = 0; // 串列長度(當前元素數量) #extendRatio = 2; // 每次串列擴容的倍數 /* 建構子 */ constructor() { this.#arr = new Array(this.#capacity); } /* 獲取串列長度(當前元素數量)*/ size() { 第 4 章0 码力 | 379 页 | 18.78 MB | 9 月前3
共 18 条
- 1
- 2