Up5me
Trang chủ > Câu hỏi lẻ > ZPl5s9zjQww5

Đề bài

Công thức để tính dãy số Fibonacci như sau:

Fo =F=1

F = Fai + Fa» (với n>=2)

Để tính giá trị của số Fibonacci thứ n, hai học sinh đã viết hai hàm như sau:

Sau khi xem xét hai chương trình này, một nhóm học sinh khác có các ý kiến như sau:

1. Biến f trên đoạn mã lệnh thứ nhất là một biến kiểu danh sách.
2. Biến f trên đoạn mã lệnh thứ hai là một biến kiểu danh sách.
3. Với n = 4, hai thuật toán sử dụng số lượng phép cộng là bằng nhau.
4. Cả hai thuật toán có độ phức tạp là như nhau.
Đáp án đúng: 1S, 2Đ, 3S, 4S

Xem lời giải

Phương pháp giải

Lời giải chi tiết

Giải thích

Chúng ta cần xem xét từng ý kiến một:

  1. Trong đoạn mã của học sinh thứ nhất, biến f được sử dụng để lưu trữ kết quả của hàm đệ quy và chỉ đơn giản là một số nguyên, không phải kiểu danh sách. Vậy ý kiến này sai.
  2. Trong đoạn mã của học sinh thứ hai, biến f được khởi tạo là một danh sách (f = [1, 1]) và sau đó được mở rộng bằng phương thức append(). Vậy ý kiến này đúng.
  3. Với n = 4, hàm của học sinh thứ nhất sẽ thực hiện các lời gọi đệ quy như sau:
    • Fibo(4) = Fibo(3) + Fibo(2)
    • Fibo(3) = Fibo(2) + Fibo(1)
    • Fibo(2) = Fibo(1) + Fibo(0)
    • Tổng cộng là 3 phép cộng.
    Học sinh thứ hai sẽ thực hiện vòng lặp 2 lần (từ i = 2 đến i = 3), mỗi lần thực hiện 1 phép cộng:
    • Tổng cộng là 2 phép cộng.
    Vậy ý kiến này sai.
  4. Độ phức tạp của thuật toán của học sinh thứ nhất là hàm đệ quy có độ phức tạp O(2^n) vì nhiều lời gọi đệ quy lặp lại, trong khi thuật toán của học sinh thứ hai có độ phức tạp O(n) vì nó sử dụng vòng lặp đơn giản. Vậy ý kiến này sai.

Chú ý khi giải

  • Cần phân biệt rõ giữa hàm đệ quy và hàm dùng vòng lặp để biết độ phức tạp.
  • Xem xét kỹ số lượng phép toán khi thực hiện hàm với một giá trị cụ thể, để không bị nhầm lẫn.
  • Biến kiểu danh sách thường được khởi tạo thành danh sách và sử dụng các phương thức như append để thêm phần tử.