Trang chủ
PHASE 5: TRẬN CHIẾN CUỐI CÙNG - LUYỆN ĐỀ PART B (DAY 86 - 100)/Ngày 94/100
DAY 94🇯🇵 再帰アルゴリズム
Pseudo-code Drills: Kỹ thuật đệ quy
94%
Quảng cáo • Advertisement
📢 Sponsor Ad
Google AdSense
lesson.content.title
lesson.content.subtitle
🎯 Đọc code Đệ quy
Đề thi thường cho một hàm đệ quy lạ hoắc và hỏi kết quả.
func F(n):
if n <= 1 return 1
return n * F(n - 1)
Cách giải (Trace Table):
🔍 Trace Table (Bảng Vết)
| Lần gọi | n | Điều kiện n <= 1? | Thực thi | Kết quả trả về |
|---|---|---|---|---|
| F(3) | 3 | False | 3 * F(2) | 3 * 2 = 6 |
| F(2) | 2 | False | 2 * F(1) | 2 * 1 = 2 |
| F(1) | 1 | True | Return 1 | 1 |
Stack Memory: F(3) chờ F(2), F(2) chờ F(1). Khi F(1) xong, nó đẩy ngược kết quả lên trên.
Đừng cố nhẩm trong đầu. Hãy viết stack ra giấy!
2. Fibonacci tối ưu (Memoization / Dynamic Programming)
Đệ quy thường tính F(5) sẽ gọi tính F(3) hai lần -> Chậm.
Giải pháp: Lưu kết quả đã tính vào mảng memo[].
func F(n):
if memo[n] != -1 return memo[n] // Tính rồi thì trả về luôn
if n <= 1 return 1
memo[n] = F(n - 1) + F(n - 2) // Tính xong nhớ lưu lại
return memo[n]
3. Tower of Hanoi (Tháp Hà Nội)
Bài toán đệ quy kinh điển: Chuyển n đĩa từ cột A sang cột C dùng cột B làm trung gian.
func Hanoi(n, from, to, aux):
if n == 1:
print("Move disk 1 from", from, "to", to)
return
Hanoi(n - 1, from, aux, to)
print("Move disk", n, "from", from, "to", to)
Hanoi(n - 1, aux, to, from)
👉 Câu hỏi thi: Với n đĩa, cần tối thiểu bao nhiêu bước? Đáp án: $2^n - 1$.
📝 Luyện tập Part B (Exam Drills):
- Câu hỏi: Khi nào thì đệ quy gây ra lỗi "Stack Overflow"?
Đáp án
Khi không có điểm dừng (Base case) hoặc điểm dừng không bao giờ đạt tới, dẫn đến gọi vô tận và tràn bộ nhớ Stack. - Câu hỏi: Trace hàm
F(n) = n + F(n-1)vàF(0)=0. TínhF(4)?Đáp án
10. (4 + 3 + 2 + 1 + 0).
Quảng cáo • Advertisement
📢 Ad Space
Google AdSense