关于java:斐波那契兔子问题

35次阅读

共计 908 个字符,预计需要花费 3 分钟才能阅读完成。

    /*  1、有一对兔子,每两个月生一对兔子,问几个月后兔子总数有多少?*/ // 递归函数
 public static int Recursion1(int n) {
        int num;
 if(n == 0 || n == 1)
            num = 1;
 else // 尽管是兔子,然而近亲通婚真的能够吗?// 每对兔子都是每两个月就滋生一对,所以每过两个月,兔子的个数翻倍
 num = Recursion1(n - 2)*2; // 每对兔子都是每两个月就滋生一对,所以每过两个月,兔子的个数翻倍
 return num;
 }
    // 循环函数
 public static int Cycle1(int n) {
        int num=1;
 if(n == 0 || n == 1)
            num = 1;
 else{for(int i=0; i<n/2;i++){num*=2;}
        }
        return num;
 }
    /*  2、一对兔子,出世后第三个月开始有生育能力,每月滋生一对小兔子。问一对兔子一年中可滋生出多少对兔子?*/ // 递归求解
 public static int Recursion2(int n) {if(n == 1 || n == 2)
            return 1;
 else return Recursion2(n-1) + Recursion2(n-2);
 }
    // 循环求解
 public static int Cycle2(int n) {
        int sum=0;
 while(n>0){
            int a=1; // a 是一个月兔子
 int b=0; // b 是两个月的兔子
 int c=0; // c 是三个月及以上可生养的兔子
 while(--n>0){ // 每过一个月兔子变动
 c += b;
 b = a;
 a = c;
 }
            sum = a+b+c;
 }
        return sum;
 }
    
    public static void main(String[] args) {
        // 在这里假如过了 6 个月
 System.out.println("1、6 个月后,共有" + Recursion1(6) + "对兔子");
 System.out.println("1、6 个月后,共有" + Cycle1(6) + "对兔子");
 System.out.println("2、7 个月后,共有" + Recursion2(7) + "对兔子");
 System.out.println("2、7 个月后,共有" + Cycle2(7) + "对兔子");
 }

正文完
 0