1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Dãy số Fibonacci và bài toán nuôi thỏ ppsx

5 4,7K 20

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 144,75 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 s

Trang 1

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)

Trang 2

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)

{

Trang 3

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;

Trang 4

Fn_1=Fn;

}

return Fn;

}

Cài đặt bài toán nuôi thỏ bằng ngôn ngữ Pascal

VAR thang,i, tn, tn_1, tn_2:INTEGER;

BEGIN

write('Nhap so thang: ');

readln(thang);

IF thang>2 THEN

BEGIN

tn_2:=1; {Thang dau tien co 1 cap tho}

tn_1:=1; {Thang thu 2 van co 1 cap tho} FOR i:=3 TO thang DO

BEGIN

tn:=tn_1 + tn_2;

Trang 5

tn_2:=tn_1;

tn_1:=tn;

END;

END

ELSE

tn:=1;

writeln('So con tho sau ',thang,' thang la: ',2*tn);

readln

END

Lưu ý: hiện nay có một số sai khác về định nghĩa dãy Fibonacci như sau:

• F(n) = 1 nếu n < 2

• F(n) = F(n – 1) + F(n – 2) nếu n >= 2

hoặc theo định nghĩa trên wikipedia:

• F(n) = n nếu n < 2

• F(n) = F(n – 1) + F(n – 2) nếu n >= 2

Ngày đăng: 13/08/2014, 19:21

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w