Dãy Fibonacci¶
Tóm lược nội dung
Bài này trình bày bài toán dãy Fibonacci bằng kỹ thuật đệ quy.
Bài toán¶
Dãy số Fibonacci được định nghĩa như sau:
- \(F_0 = 0\)
- \(F_1 = 1\)
- \(F_n = F_{n - 1} + F_{n - 2} \quad \text{với } n \ge 2\)
Yêu cầu:
Sử dụng kỹ thuật đệ quy, viết chương trình xác định giá trị của số Fibonacci thứ \(n\).
Input:
Số nguyên không âm \(n\).
Output:
Giá trị của số Fibonacci thứ \(n\).
Test case:
| STT | Input | Output |
|---|---|---|
| 1 | 0 | 0 |
| 2 | 1 | 1 |
| 3 | 2 | 1 |
| 4 | 3 | 2 |
| 5 | 4 | 3 |
| 6 | 5 | 5 |
| 7 | 10 | 55 |
| 8 | 30 | 832040 |
Bài giải đề xuất¶
Ý tưởng chính
-
Trường hợp cơ sở:
Bài toán này có hai trường hợp cơ sở:
- Khi \(n = 0\): trả về
0. - Khi \(n = 1\): trả về
1.
- Khi \(n = 0\): trả về
-
Trường hợp đệ quy:
Khi \(n \ge 2\): trả về \(F_n = F_{n - 1} + F_{n - 2}\).
Ví dụ:
Sơ đồ dưới đây minh họa quá trình tính \(\text{fibonacci}(4)\):
%%{
init: {
'theme': 'default',
'look': 'classic',
'flowchart': { 'padding': 15 }
}
}%%
flowchart TD
F4["fibonacci(4)"] --> F3["fibonacci(3)"]
F4 --> F2_1["fibonacci(2)"]
F3 --> F2_2["fibonacci(2)"]
F3 --> F1_1["fibonacci(1) = 1"]
F2_1 --> F1_2["fibonacci(1) = 1"]
F2_1 --> F0_1["fibonacci(0) = 0"]
F2_2 --> F1_3["fibonacci(1) = 1"]
F2_2 --> F0_2["fibonacci(0) = 0"]
classDef root fill:#e0f2fe,stroke:#0284c7,color:#0369a1,rx:1.5rem,ry:1.5rem
classDef base1 fill:#fef3c7,stroke:#d97706,color:#92400e,rx:1.5rem,ry:1.5rem
classDef base0 fill:#fce7f3,stroke:#db2777,color:#9d174d,rx:1.5rem,ry:1.5rem
class F4,F3,F2_1,F2_2 root
class F1_1,F1_2,F1_3 base1
class F0_1,F0_2 base0
Viết chương trình
1. Viết hàm fibonacci().
Hàm gồm có một tham số là n và giá trị trả về là số Fibonacci thứ n.
2. Viết chương trình chính:
- Cho người dùng nhập vào một số nguyên không âm, lưu vào biến
number. - Gọi hàm
fibonacci()ra thực hiện, lưu kết quả vào biếnresult. - In ra kết quả.
3. Chạy chương trình, nhập vào 10, kết quả như sau:
Mã nguồn¶
Code đầy đủ được đặt tại: