Dãy số Fibonacci và bài toán nuôi thỏ
Số trang: 5
Loại file: pdf
Dung lượng: 144.75 KB
Lượt xem: 13
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
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...
Nội dung trích xuất từ tài liệu:
Dãy số Fibonacci và bài toán nuôi thỏ 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àitoán đặt ra như sau:1) Các con thỏ không bao giờ chết2) 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 conmớiGiả 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ó baonhiê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) theocô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ườngint F(int n){ if (n if (n Fn_1=Fn; } return Fn;}Cài đặt bài toán nuôi thỏ bằng ngôn ngữ PascalVAR 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; tn_2:=tn_1; tn_1:=tn; END; END ELSE tn:=1; writeln(So con tho sau ,thang, thang la: ,2*tn); readlnEND.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 >= 2hoặ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
Nội dung trích xuất từ tài liệu:
Dãy số Fibonacci và bài toán nuôi thỏ 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àitoán đặt ra như sau:1) Các con thỏ không bao giờ chết2) 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 conmớiGiả 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ó baonhiê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) theocô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ườngint F(int n){ if (n if (n Fn_1=Fn; } return Fn;}Cài đặt bài toán nuôi thỏ bằng ngôn ngữ PascalVAR 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; tn_2:=tn_1; tn_1:=tn; END; END ELSE tn:=1; writeln(So con tho sau ,thang, thang la: ,2*tn); readlnEND.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 >= 2hoặ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
Tìm kiếm theo từ khóa liên quan:
Công nghệ thông tin cấu trúc dữ liệu lý thuyết đồ thị Javascript ASP.NET Tin học đại cương giáo trình Tin học đại cương bài giảng Tin học đại cương tài liệu Tin học đại cương lý thuyết Tin học đại cươngGợi ý tài liệu liên quan:
-
52 trang 409 1 0
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 300 0 0 -
Top 10 mẹo 'đơn giản nhưng hữu ích' trong nhiếp ảnh
11 trang 291 0 0 -
Ứng dụng công cụ Quizizz thiết kế trò chơi học tập trong giảng dạy học phần tin học đại cương
12 trang 284 0 0 -
Báo cáo thực tập thực tế: Nghiên cứu và xây dựng website bằng Wordpress
24 trang 283 0 0 -
74 trang 274 0 0
-
96 trang 274 0 0
-
Tài liệu dạy học môn Tin học trong chương trình đào tạo trình độ cao đẳng
348 trang 265 1 0 -
Đồ án tốt nghiệp: Xây dựng ứng dụng di động android quản lý khách hàng cắt tóc
81 trang 261 0 0 -
EBay - Internet và câu chuyện thần kỳ: Phần 1
143 trang 251 0 0