搜索
写经验 领红包
 > 自然

深入浅出学算法018-兔子繁殖(关于兔子繁殖问题的简便方法)

在生活中,很多人可能想了解和弄清楚算法学习-兔子繁殖问题的相关问题?那么关于深入浅出学算法018-兔子繁殖的答案我来给大家详细解答下。

深入浅出学算法018-兔子繁殖(关于兔子繁殖问题的简便方法)

兔子繁殖问题

问题描述

著名意大利数学家Fibonacci曾提出这样一个问题,说是:有一对兔子,从出生后第3个月起每月都生一对小兔子,小兔子长到第3个月后每个月又生一对小兔子,按此规律,假设兔子没有死亡,第一个月有一对刚出生的小兔子,问第n个月有多少对兔子?

问题分析

对于这类问题,如果仅凭脑子思考,想不明白的话,可以通过模拟兔子生小兔子列式子的方式来做,找出其中的规律

(编程就是通过找题目中的规律,然后抽象,使得可以用通用方式来表达,再将这种通用方式写成某种语言的形式)

第1个月:1

第2个月:1

第3个月:1+1=2(第1个数1表示原来的兔子,第2个数1表示生的小兔子)

第4个月:2+1=3(第1个数2表示上个月的兔子数,第2个数1表示一开始的兔子又生了一对小兔子)

第5个月:3+2=5(第1个数3表示上个月的兔子数,第2个数2表示一开始的老兔子又生了一对小兔子+老兔子的孩子生的一对小兔子,其实就是上上个月的兔子数,上上个月有几对兔子,就会再生几对小兔子)

第6个月:5+3=8

第7个月:8+5=13

由上面的分析可以得到一个规律,就是目前的兔子对数,就是上个月的兔子数+上上个月的兔子数

(其实这个规则,通过数字1 1 2 3 5 8 13….的规律也可以看出来,这就是著名的斐波那契数列。)

参考程序

这个程序可以采用两种方式来实现:

一是采用循环

include <stdio.h>int fun(int month){ if(month==1){ return 1;//第1个月,1对兔子,递归的跳出条件 } if(month==2){ return 1;//第2个月,1对兔子,递归的跳出条件 } else return fun(month-1)+fun(month-2); //返回上个月的兔子对数+上上个月的兔子对数}int main(){ int n; scanf("%d",&n); printf("%d\n",fun(n));​ return 0;}

温馨提示:通过以上关于算法学习-兔子繁殖问题内容介绍后,相信大家有新的了解,更希望可以对你有所帮助。