古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

思路:先求出每个月新增的兔子,再用循环求和即可算出这个月总的兔子数。

月份  新增加兔子

1    1

2    0

3    1

4    1

5    1 + 1

6    1 + 1 + 1

7    (1 + 1 + 1)6月份新增的兔子 + (1 + 1)5月份新增的兔子

...    ...

n    n - 1月份新增的兔子 + n - 2月份新增的兔子

解法核心:每个月的新增的兔子都在下下个月以及以后的每个月生下一对新兔子,这对新兔子在下下个月以及以后的每个月都会生下一对新兔子,以此规律循环。

    因此,只要上个月有新增的兔子后,这个月都会新增和上个月新兔子数量同样的兔子,同时还会新增上上个月兔子数量的新兔子。这两个数量相加就得到这个月一共新增加的兔子。

用递归的方法求出每个月新增的兔子(自定义函数):

static int NewRabbitOfMonth(int n)
        {
            if(n == 1)
            {
                return 1;
            }
            else if(n == 2)
            {
                return 0;
            }
            else
            {
                return NewRabbitOfMonth(n - 1) + NewRabbitOfMonth(n - 2);
            }
        }

用循环求和的方法求出每个月的兔子总数(主函数):

static void Main(string[] args)
        {
            Console.Write("请输入第几个月:");
            int n = int.Parse(Console.ReadLine());
            int sumRabbitOfMonth = 0;
            for(int i =1; i <= n; i++)
            {
                sumRabbitOfMonth += NewRabbitOfMonth(i);
            }
            Console.Write("第" + n + "个月共有" + sumRabbitOfMonth + "对兔子");
            Console.ReadLine();
        }

思考:

每个月新增的兔子数量实际上是一个斐波拉契数列:
1,0,1,1,2,3,5...

每个月总的兔子数量也是一个斐波拉契数列:

1,1,2,3,5,8,13...

下面个数列每一项减去上面个数量每一项得到的新数列也是斐波拉契数列:

0,1,1,2,3,5,8...

结论:

一个斐波拉契数量的每一项减去另一个斐波拉契数列的对应每一项得到的新数列也是斐波拉契数列。(待验证)

经典的兔子生兔子问题(C#递归解法)的更多相关文章

  1. while做法1.兔子生兔子 2.求100以内质数的和3.洗发水15元 牙膏5元 香皂2元 150元的算法

    1.兔子生兔子 2.求100以内质数的和 3.150块钱花完问题

  2. while:1.兔子生兔子问题 2.打印菱形 3.求100以内质数的和4.洗发水15元一瓶,牙膏5元一支,香皂2元一块,150元刚好花完

    1.兔子生兔子问题: 2.打印菱形 3.求100以内质数的和 4.洗发水15元一瓶,牙膏5元一支,香皂2元一块,150元刚好花完有多少种情况?

  3. for嵌套:1.兔子生兔子问题 2.打印菱形 3.求100以内质数的和

    1.兔子生兔子问题 方法一: 方法二: 2.打印菱形 3.求100以内质数的和

  4. 兔子生娃问题---函数递归应用--c语言实现

    事情是这样的:在很久很久以前....有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 兔子的规律为数列:1, 1 ...

  5. C#部分---语言经典题目——兔子生兔子

    根据本月成兔=上月成兔+上月小兔:本月小兔=上月幼兔:本月幼兔=本月成兔 利用while循环: Console.WriteLine("请输入月份:"); //int m = int ...

  6. Python练习题 007:兔子生兔子

    [Python练习题 007] 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? ----------------- ...

  7. JS循环语句作业讲解(折纸、兔子生兔子、买东西组合)

    1.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米: varn = 0;varg = 0.0001;while(){ g= g *2; n++ (g>8848bre ...

  8. 用Java编程计算兔子生兔子的问题

    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析: 这是一个典型的Fibonacci数列问 ...

  9. 【Python】【demo实验14】【练习实例】【斐波那契数列】【经典兔子生小兔子问题】

    古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 每个月的兔子数量 1:22:23:4 2+24:6 2+ ...

随机推荐

  1. Web前端应该从哪些方面来优化网站

    作者:斯迪链接:https://www.zhihu.com/question/21658448/answer/18903129来源:知乎著作权归作者所有,转载请联系作者获得授权. 不知道是哪位大牛的文 ...

  2. springcloud(八) Hystrix监控

    一.Feign项目Hystrix自带的监控 在feign项目pom.xml 添加: <!-- 1,使用 Hystrix的模块 hystrix-metrics-event-stream,就可将这些 ...

  3. [Z] Windbg以及vs debug使用

    Windbg 一篇中国人写的质量非常高的Windbg文章:篇中国人写的质量非常高的Windbg文章: http://www.yiiyee.cn/Blog/windbg/ code project上的W ...

  4. zmq消息订阅

    一个需求,用户预约了手机超时没有使用,要通知到预约的用户“设备超时”. 我本来是自己这一端计时然后超时后推送通知的. 但是上海测说他那边计时,然后释放手机.我这边只要订阅他那边的消息就好了. 外部的应 ...

  5. DBNavigator中把insert变为append

    procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);begin    if Button = nbIns ...

  6. 光圈、曝光、ISO

    光圈大小对景深的影响: 光圈大小示意图(值越小光圈越大) 光圈.曝光.ISO对图像效果影响

  7. XML解析的二种方法之Sax解析

    package com.huawei.xml; import java.io.InputStream;import java.util.Stack; import javax.xml.parsers. ...

  8. react-navigation 3.x版本的使用

    安装配置请看: react-navigation 3.x版本的安装以及react-native-gesture-handler配置 2.0以前版本: StackNavigator - 一次只渲染一个页 ...

  9. ios7 导航栏适配

    ios ui开发过程中,经常会使用到导航栏,默认的样式比较单一,所以经常需要修改导航栏的样式 ios4: - (void)drawRect:(CGRect)rect { UIImage *image ...

  10. mysql中timestamp简单用法

    该时间字段有比较特殊的地方,显示内容datetime字段一样.当取值为null或者不赋值时,显示当前系统时间,然后在其他地区读取的时候会根据当地的时间转换成当地的系统时间.