Đang chuẩn bị nút TẢI XUỐNG, xin hãy chờ
Tải xuống
Dãy số Fibonacci bắt nguồn từ bài toán cổ về việc sinh sản của các cặp thỏ. Bài toán đặt ra như sau: 1) Các con thỏ không bao giờ chết 2) Hai tháng sau khi ra đời, mỗi cặp thỏ mới sẽ sinh ra một cặp thỏ con (một đực, một cái) 3) Khi đã sinh con rồi thì cứ mỗi tháng tiếp theo chúng lại sinh được một cặp con mới Giả sử từ đầu tháng 1 có một cặp mới ra đời thì đến giữa tháng thứ n sẽ có bao nhiêu cặp. Ví dụ, n. | Dãy số Fibonacci và bài toán nuôi thỏ Dãy số Fibonacci bắt nguồn từ bài toán cổ về việc sinh sản của các cặp thỏ. Bài toán đặt ra như sau 1 Các con thỏ không bao giờ chết 2 Hai tháng sau khi ra đời mỗi cặp thỏ mới sẽ sinh ra một cặp thỏ con một đực một cái 3 Khi đã sinh con rồi thì cứ mỗi tháng tiếp theo chúng lại sinh được một cặp con mới Giả sử từ đầu tháng 1 có một cặp mới ra đời thì đến giữa tháng thứ n sẽ có bao nhiêu cặp. Ví dụ n 5 ta thấy Giữa tháng thứ 1 1 cặp ab cặp ban đầu Giữa tháng thứ 2 1 cặp ab cặp ban đầu vẫn chưa đẻ Giữa tháng thứ 3 2 cặp AB cd cặp ban đầu đẻ ra thêm 1 cặp con Giữa tháng thứ 4 3 cặp AB cd ef cặp ban đầu tiếp tục đẻ Giữa tháng thứ 5 5 cặp AB CD ef gh ik cả cặp AB và CD cùng đẻ Bây giờ ta xét tới việc tính số cặp thỏ ở tháng thứ n F n Nếu mỗi cặp thỏ ở tháng thứ n - 1 đều sinh ra một cặp thỏ con thì số cặp thỏ ở tháng thứ n sẽ là F n 2 F n - 1 Nhưng vấn đề không phải như vậy trong các cặp thỏ ở tháng thứ n - 1 chỉ có những cặp thỏ đã có ở tháng thứ n - 2 mới sinh con ở tháng thứ n được thôi. Do đó F n F n - 1 F n - 2 số cũ số sinh ra . Vậy có thể tính được F n theo công thức sau F n 1 nếu n 2 F n F n - 1 F n - 2 nếu n 2 Trích Cấu trúc dữ liệu và giải thuật - Lê Minh Hoàng Cài đặt hàm tính Fn băng ngôn ngữ C Cài đặt đệ quy bình thường int F int n if n 2 return 1 return F n-1 F n-2 Cài đặt đệ quy tuyến tính void F int Fn int Fn_1 int n if n 2 Fn Fn_1 1 else int Fn_2 F Fn_1 Fn_2 n-1 Fn Fn_1 Fn_2 Cài đặt không đệ quy int F int n if n 2 return 1 int Fn Fn_1 Fn_2 Fn_1 Fn_2 1 for int i 3 i n i Fn Fn_1 Fn_2 Fn_2 Fn_1