黑马程序员技术交流社区

标题: 斐波那契数列 [打印本页]

作者: 52java    时间: 2016-9-3 22:44
标题: 斐波那契数列
import java.math.BigInteger;
import java.util.Arrays;

public class Demo03 {
        public static void main(String[] args) {
                /*
                 * 用循环实现不死神兔(斐波那契数列)
                故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。
                在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔,
                再过一个月就能生下一对小兔,并且此后每个月都生一对小兔,一年内没有发生死亡,
                问:一对刚出生的兔子,一年内繁殖成多少对兔子?
               
                 1 1 2 3 5 8 13 21
                 规律:从第三个月开始,兔子对数是前两个月之和
                 出口:第一个月和第二个月的兔子对数都是 1
               
                 */
               
                //求第12个月的兔子对数
//                method1();
               
                // 第100个月繁殖多少对兔子?(利用BigInteger完成)
                //定义三个BigInteger类型的对象,分别代表: 相邻两月的兔子对数,  比如说:代表第一月和第二月,代表第二月和第三月,代表第三月和第四月,依次类推
                //bi3代表的是 这两个月的兔子对数总和
                //
                //method2();
               
               
                // 1 1 2 3 5 8 13 21
                //用递归求第12项的值
                // 规律:从第三个月开始,兔子对数是前两个月之和
                 //出口:第一个月和第二个月的兔子对数都是 1
                System.out.println(getNum(12));
               
        }
       
        //递归的方式实现计算结果
        public static int getNum(int month){   //这个month就是要计算的月
                //写出口
                if (month ==1 || month ==2) {
                        return 1;
                }else {
                        //写规律
                        //从第三个月开始,兔子对数是前两个月之和
                        return getNum(month -1) +  getNum(month-2);
                }
        }

        //计算第100个月的兔子对数
        public static void method2() {
                BigInteger bi1=null, bi2=null, bi3=null;
                for (int i = 1; i <= 100; i++) {
                        if (i==1 || i==2) {
                                bi1 = new BigInteger("1");
                                bi2 = new BigInteger("1");
                        }else {
                                //能进到这里,说明至少是第三个月了
                                bi3 = bi1.add(bi2);
                                bi1 = bi2;
                                bi2 = bi3;
                        }
                }
                System.out.println(bi3);
        }

        //计算第12个月的兔子对数
        public static void method1() {
                int[] arr = new int[100];
                arr[0] = 1;
                arr[1] = 1;
                for (int i = 2; i < arr.length; i++) {
                        //arr[2] = arr[1] + arr[0];
                        arr[i] = arr[i-1] + arr[i-2];
                }
                System.out.println(Arrays.toString(arr));
        }
}





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