C++初学之 2.递归算法典型案例: 斐波那契(Fibonacci)兔子问题(第三项为前两项的累加问题)

著名的意大利数学家斐波那契(Fibonacci)在他的著作《算盘书》中提出了一个“兔子问题”:假定小兔子一个月就可以长成大兔子,而大兔子每个月都会生出一对小兔子。(即兔子从生后第三个月才会生小兔子。)如果年初养了一对小兔子,问到年底时将有多少对兔子?  (当然得假设兔子没有死亡而且严格按照上述规律长大与繁殖)。

 1、分析问题。

我们可以根据题意列出表1来解决这个问题:

表1兔子问题分析表

 

1月

2月

3月

4月

5月

6月

7月

8月

9月

10月

11月

12月

小兔

1

 

1

1

2

3

5

8

13

21

34

55

大兔

 

1

1

2

3

5

8

13

21

34

55

89

合计

1

1

2

3

5

8

13

21

34

55

89

144

这个表格虽然解决了斐波那契的兔子问题(年底时兔子的总数是144只),但仔细观察一下这个表格,你会发现兔子的数目增长得越来越快,如果时间再长,只用列表的方法就会有困难。(例如,你愿意用列表的方法求出5年后兔子的数目吗?)我们需要研究表中的规律,找出一般的方法,去解决这个问题。

 1 #include <iostream>
2 using namespace std;
3 int fib(int n){
4 if(n==1||n==0)return 1;
5 else return (fib(n-1)+fib(n-2));
6 }
7 int main(){
8 cout<<"请输入月数为:"<<endl;
9 int n;
10 cin>>n;
11 cout<<"兔子总数为:"<<fib(n)<<endl;
12 return main();
13 }

 

posted @ 2012-02-17 13:03  LeeKing  阅读(1208)  评论(0编辑  收藏  举报