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 }

 

转载于:https://www.cnblogs.com/leeking/archive/2012/02/17/2355623.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值