小兔第三月起每月可生一兔,兔又生兔,若兔不死,每月有几兔?

#头条创作挑战赛#

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

小兔第三月起每月可生一兔,兔又生兔,若兔不死,每月有几兔?

第一种解法:

问题分析:

第一个月是小兔子,是一对小兔子;

第二个月从小兔子变成大兔子,是一对大兔子;

第三个月大兔子生出小兔子加上本身的一对大兔子,是一对大兔子 一对小兔子 共2对兔子 1+1 = 2;

第四个月大兔子生出小兔子加上本身的一对大兔子,小兔子变成大兔子,是2对大兔子,一对小兔子,共3对兔子 2 + 1 = 3;

第五个月2对大兔子生出2对,小兔子长成大兔子,共5对兔子 2 + 3 = 5;可知每对兔子需要一个月长大,两个月才能生产;

由此可知 第三个月以后每个月的兔子对数等于前两个月的兔子对数相加。

 public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入月份:");
        int n = sc.nextInt();//可以自己设置第几个月的兔子总数
        System.out.println("第"+n+"个月兔子总数为"+fun(n));
    }
    private static int fun(int n){
        if(n==1 || n==2)
            return 1;
        else
            return fun(n-1)+fun(n-2);
    }

小兔第三月起每月可生一兔,兔又生兔,若兔不死,每月有几兔?

第二种解法

问题分析:

问题剖析: 1 1 2 3 5 8 13 21 34 55 89 144(1-12个月兔子的对数),当第三个开始,数值为前两项之和

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入月份:");
        int[] mon = new int [sc.nextInt()];//自己设置月份
        int len = mon.length;//获取数组的长度36
        mon[0] = 1;//1月不生,有一对
        mon[1] = 1;//2月不生,有一对

        for(int i = 2; i<len;i++){//循环数组的长度,即月份
            mon[i] = mon[i-1] + mon[i-2];//从第2个月以后,第i个元素值等于前两项元素之和
        }
        //System.out.println(Arrays.toString(mon));//遍历数组
        System.out.println(mon.length+"个月一共生了: "+mon[mon.length-1]+" 对兔子");//打印数组的最后一个值
    }

小兔第三月起每月可生一兔,兔又生兔,若兔不死,每月有几兔?

第三种解法:

问题分析:

首先,当位数为1时返回值为1;位数为2时返回1;当位数为3时,其返回值为2;因为他们是起始值;

然后,当位数为4时,其返回值 = 3 = 2 + 1;

当位数为5时,其返回值 = 5 = 3 + 2;

当位数为6时,其返回值 = 8 = 5 + 3;

当位数为7时,其返回值 = 13 = 8 + 5;

当位数为8时,其返回值 = 21 = 13+8;

......

所以由以上可得,大于等于3的情况下,当前位数的值

f (n) = f(n-1)+ f(n-2)。

public static void main(String[] args) {
        System.out.println("请月份数:");
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        System.out.println("第"+n+"个月一共有"+f(n)+"只兔子");
    }
    public static int f(int n) {
        if(n!=1&&n!=2) {
            if(n!=3) {
                return f(n-1)+f(n-2);
            }
            return 2;
        }
        else return 1;
    }

小兔第三月起每月可生一兔,兔又生兔,若兔不死,每月有几兔?