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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class RabbitTest {
        public static void main(String[] args) {
                // 方法1
                int[] array = new int[20];
                // 从第三个月开始,是前两个数的和array[2]=array[1]+array[0]
                array[0] = 1;// 已知
                array[1] = 1;// 已知
                for (int x = 2; x < array.length; x++) {
                        array[x] = array[x - 1] + array[x - 2];
                }
                System.out.println("第20个月的兔子对数是:" + array[array.length - 1]);
               

                // 方法2(相邻取值法)
                /*
                 * 假设相邻的兔子对数是x,y 第一个相邻数据: x=1,y=1
                 * 第二个相邻数据: x=1,y=2 第三个相邻数据: x=2,y=3
                 * 第四个相邻数据: x=3,y=5 第五个相邻数据: x=5,y=8 .....
                 *  第x次的x是上一次的y值,第x次的y是上一次的x和y之和
                 */
                int x = 1;// 已知
                int y = 1;// 已知
                // 为什么18次循环呢?因为从第二次开始x=1,y=1+1的,少一次,3个数据相邻的次数只有2次,,所以由少一次,所以18次
                for (int i = 0; i < 18; i++) {
                        int tempx = x;// 上一次的x
                        int tempy = y;// 上一次的y
                        x = tempy;
                        y = tempx + tempy;
                }
                System.out.println("第20个月的兔子对数是:" + y);
               

                // 方法3
                //递规方法
                System.out.println("第20个月的兔子对数是:" + getSum(20));
        }

        // 递规实现
        // 方法返回值类型int,参数列表int month,出口条件month=1或者month=2,规律前两个月之和
        public static int getSum(int month) {
                if (month == 1 || month == 2)
                        return 1;
                else
                        return getSum(month - 1) + getSum(month - 2);
        }
}
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端

2 个回复

倒序浏览
回复 使用道具 举报
递归调用,还没学习到,先来保存下来咯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马