A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李-超 中级黑马   /  2016-3-25 21:47  /  898 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

7 个回复

正序浏览
算法不错....
回复 使用道具 举报
class FibonacciNumber  {
        /*
        编写程序:有一对兔子,从出生后第3个月起每个月都生一对兔子,
                小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
        */
        /*
                分析:
                   规律:
                   月份                兔子对数
                   1                  1
                   2                  1        
                   3                  2        = 1+1;
                   4                  3 = 2+1;
                   5                  5 = 3+2;
                 前两个月兔子对数都为1,之后每月兔子对数为前两个月之和;
        */
        //方案一,数组法
        public static void arrays(int month) {
                int[] arr = new int[12];
                arr[0] = 1;                                                //将数组中第一个元素设置为1代表第一个月兔子的对数
                arr[1] = 1;                                                //将数组中第二个元素设置为1代表第二个月兔子的对数
                for (int i = 2;i < arr.length;i++ ) {
                        //利用循环便利依次给数组中的元素赋值,其值分别为前两个元素之和,得到斐波那契数列
                        arr[i] = arr[i - 2] + arr[i - 1];
                }
                System.out.println("第" + month + "月,兔子对数为:" + arr[month - 1]);
        }
        //方案二:递归法(recursion:递归)
        public static int recursion(int month) {
                int rabbit;
                if (month == 1 || month == 2) {                        //当月数为1或2时返回兔子对数为1
                                rabbit = 1;
                                return rabbit;
                }else {                                                                //当月数大于2时利用递归调用将前两个月的兔子数相加
                        rabbit = recursion(month - 2) + recursion(month - 1);
                        return rabbit;
                }
        }

        public static void main(String[] args)  {
                int month = 10;
                arrays(month);
                System.out.println("第" + month + "月,兔子对数为:" + recursion(month));        }
回复 使用道具 举报
我也在网上看见了这个题目,这个数列是斐波那契数列,据说是很经典的题目,然而我还是没做出来,佩服二楼!
回复 使用道具 举报
赵浩霖 发表于 2016-3-25 21:55
那笔算了下,这个数列有个规律就是,从第三个数开始f(n)=f(n-1)+f(n-2)。也就是一个数等于前两个数的和。可 ...

牛叉!!!!!!
回复 使用道具 举报
递归思想
回复 使用道具 举报
二楼厉害棒棒哒棒棒哒
回复 使用道具 举报
那笔算了下,这个数列有个规律就是,从第三个数开始f(n)=f(n-1)+f(n-2)。也就是一个数等于前两个数的和。可以这样写:
public class TuZi {
public static void main(String[] args) {
System.out.println("第1个月的兔子对数:    1");
System.out.println("第2个月的兔子对数:    1");
int f1 = 1;
int f2 = 1;
int f;//中间变量
int  M=24;
     for(int i=3; i<=M; i++) {
      f = f2;
      f2 = f1 + f2;
      f1 = f;
      System.out.println("第" + i +"个月的兔子对数: "+f2);
         }
}
}
不知道对不对

评分

参与人数 1黑马币 +2 收起 理由
洋葱头头 + 2 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马