黑马程序员技术交流社区

标题: 斐波那契数列的两种做法 [打印本页]

作者: 荒丶    时间: 2016-4-11 21:58
标题: 斐波那契数列的两种做法
public class FibonacciNum {

        /**
         * 斐波那契数列
         * 1 1 2 3 5 8 13 21
         * 从第三个开始.后面一个数是前面两个 数的和
         * 两种求法.
         * 1.通过数组来求
         * 2.通过递归来求
         * @param args
         */
        public static void main(String[] args) {
                arrFibonacciNum(5);
                System.out.println(diguiFibonacciNum(0));
        }
        /*
         * 通过递归来求斐波那契数列
         * 分析.
         * 返回值.int  参数列表 int num
         *   1 = fun(1)
         *   1 = fun(2)
         *   2 = fun(1) + fun(2)
         *   ...
         */
        public static int diguiFibonacciNum(int num){
                //如果不加健壮性判断.栈内存会溢出
                if(num <= 0) {
                        System.out.println("请输入正确的数字");
                        return -1;
                }
                //重点在这里.当num=1或者2 返回1
                if(num == 1 || num == 2)
                        return 1;
                return diguiFibonacciNum(num - 2) + diguiFibonacciNum(num - 1 );
        }

        /*
         * 通过数组来求
         * 分析.
         * 1.定义一个数组,长度为size
         * 2.把数组的第一个元素和第二个元素设定为1.
         * 3.第三个元素是前一个元素和前前元素的和.
         * 4.遍历这个数组
         */
        public static void arrFibonacciNum(int size) {
                if(size <= 0) {
                        System.out.println("请输入 正确的长度");
                        return;
                }
                if(size <= 2) {
                        for (int i = 1; i <= size; i++) {
                                System.out.println(1);
                        }
                        return;
                }
                int[] arr = new int[size];
                arr[0] = 1;
                arr[1] = 1;
                for (int i = 2; i < arr.length; i++) {
                        arr[i] = arr[i-1] + arr[i-2];
                }
                for (int i : arr) {
                        System.out.print(i + " ");
                }
        }
}





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