题目描述

母牛每年生一只母牛,新出生的母牛成长三年后也能每年生一只母牛,假设牛不会死,求N年后,母牛的数量?

思路分析

这种递推的题目,如果拿到时暂时无法分析具体是怎样增加的,可以有一个万能方法,那就是,列举出前几项,然后找规律。这种题目,既然能出,肯定是有规律的。
年份:1 2 3 4 5 6
数量:1 2 3 4 6 9
从列举出的前六年,可以推算出,规律就是,第四年后的每一年,都是n-1年加上n-3年的和。
因此f(n)=f(n-1)+f(n-3)
找到了规律,我们再尝试证明一下,为什么是这样的?
证明:
首先,题目说牛是不会死的,那么,第N年的牛肯定要加上N-1年的牛,所以f(n-1),这个没问题吧?那么,f(n-3)是什么意思?题目说了,牛成长三年后,能生小牛,那也就是说,三年前的牛,在今年,是不是全部都能生小牛呢?因此,今年新生牛的数量,是不是就是f(n-3)?

递归代码

有了递推公式,那么,递归代码就非常容易了。

    public static int getCowNum(int n){if(n<4){return n;}return getCowNum(n-1)+getCowNum(n-3);}

思路拓展

如果将这道题,改成新生的小牛出生后两年能再生小牛,那么这道题是不是就变成斐波那契数列了?f(n)=f(n-1)+f(n-2)

再改一下,如果是k年后能再生小牛呢?
是不是就变成了f(n)=f(n-1)+f(n-k)了呢?

母牛生小牛问题(斐波那契类型)求解原理分析,一篇搞定所有类似问题相关推荐

  1. 斐波那契数列简单步骤分析

    斐波那契数列简单步骤分析 有些同学总觉得斐波那契数列很困难,其实只要把函数搞明白就一点就不困难了. 首先,来看看一段代码: #斐波那契 n = eval(input("请输入一个数:&quo ...

  2. 兔子生兔子问题(斐波那契数列)

    问题描述: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少 分析: 这道题我们可以把兔子分为三个阶段,幼崽.成年,生 ...

  3. java兔子繁殖总数_【Java基础编程练习】01:兔子繁殖问题(斐波那契数列)的分析及实现...

    01:兔子繁殖问题 Java练习,第一道就是这道题,早有耳闻,看好多答案就是直接摆上来一个斐波那契数列就完了〒▽〒,于是自己就写了一个思考过程,仅供自己将来复习吧~ 一.问题概述 题目:古典问题:有一 ...

  4. 动态规划实现斐波那契数列求解

    int fibonacciDP1(int n) { // 动态规划不使用数组int a = 0;int b = 1;int sum;int i;if (n == 0)return 0;if (n == ...

  5. 斐波那契数列求解+尾递归

    1.普通递归 这里观察f[4]的递归树代替f[10]的递归树(后者比较大,画不下). 使用递归求解的时候复杂度为T(n)=T(n−1)+T(n−2)T(n)=T(n-1)+T(n-2)T(n)=T(n ...

  6. python查询斐波那契数列通项公式_斐波那契数列求解总结(Python版)

    最近在查阅斐波那契数列时,看到下面的文章,总结得非常好,于是自己上手使用 Python 练习并实现多种求解方法 守望:面试官问你斐波那契数列的时候不要高兴得太早​zhuanlan.zhihu.com ...

  7. 求解斐波那契数列复杂度分析

    前言:斐波那契作为一个算法基础知识,大家一定要掌握,祝大家学得开心~ 什么是斐波那契数列(Fibonacci sequence)? 斐波那契数列(Fibonacci sequence),又称黄金分割数 ...

  8. java实现斐波那契数列求解办法

    斐波那契数列最早是根据兔子繁殖问题而产生的,大致有这样的一个数列:1,1,2,3,5,8,13,...,其中第一.第二项固定为1,后面每一项都是前面两项之和.使用数学公式就是f(n) = f(n-1) ...

  9. 斐波那契数列的量化分析

    1. 递归版的调用次数 cnt = 0 def fib(n):cnt += 1return n if n <= 1 else fib(n-1) + fib(n-2) 递归版的实现,共会调用多少次 ...

  10. 兔子生兔子之递归问题(递归实现斐波那契数列)

    今天给大家带来一个经典题,斐波那契数列,题目如下: //题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,//小兔子长到第三个月后每个月又生一对兔子.假如兔子都不死,要求根据输入的月份输出对应兔 ...

最新文章

  1. Android 读取meta-data元素的数据
  2. oracle10G 错误删除数据或者表 闪回功能帮你忙。。。闪回操作例子
  3. OpenCV 加载图像、转换图像和保存图像
  4. python ioctl_ioctl()函数 Unix/Linux
  5. (转)IIS7 配置ASP.NET 2.0, WCF, ASP.NET MVC
  6. mysql连接nginx_nginx四层负载均衡连接mysql
  7. android游戏开发框架libgdx的使用(二十四)—physics-body-editor配合Box2D加快开发
  8. 基于GitBook框架搭建技术文档平台
  9. 嵌入式Linux系统编程学习之十九标准管道流
  10. 【裂缝识别】基于matlab GUI路面裂缝识别(带面板)【含Matlab源码 009期】
  11. CT图像去除金属伪影-MATLAB实现
  12. Mybatis使用关联查询由于表名字段重复导致的问题
  13. word打开总是安装解决方法
  14. 10万微商被骗100亿,最大微商集团被爆涉嫌传销
  15. CRP原理的简单例子
  16. The longest zig-zag subsequence
  17. python开发“小迪安全课堂笔记”
  18. mysqldatareader什么意思_MySqlDataReader
  19. 【win10】windows音频设备图形隔离占CPU高解决办法
  20. JSONObject.parseObject

热门文章

  1. MySQL双主(主主)架构方案思路是:
  2. 泛微E9单文本默认提示信息
  3. 求sql语句 想要输出 姓名相同,身份证号码不同的记录
  4. 陕西省高级工程师评审要求
  5. 计算机基础知识整理 .
  6. 动态更改table的data—url地址,自动从新局部加载数据。
  7. 论IT服务方案的设计与实施
  8. 【如何使用 Arduino 控制伺服舵机】
  9. 使用 Netty 实现 IM 聊天贼简单,看不懂就锤爆艿艿的狗头~
  10. 【MATLAB】超前校正装置的设计