黑马程序员技术交流社区

标题: 不死神兔即斐波那契数列求和 [打印本页]

作者: 15518774871    时间: 2017-3-1 07:57
标题: 不死神兔即斐波那契数列求和
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);
        }
}

作者: lvshen9    时间: 2017-3-1 08:12
学习了

作者: 笑对明天    时间: 2017-3-1 08:33
递归调用,还没学习到,先来保存下来咯




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2