面试题9:斐波那契数列

来源:互联网 发布:mmd制作软件最新版 编辑:程序博客网 时间:2024/06/06 00:02

一. 题目

写一个函数,输入n,求斐波那契数列的第n项.

代码请到我的代码库中下载 Point2Offer

二. 代码

内含传统解法和优化后的解法.

package com;import java.util.Scanner;/** * 剑指offer: 斐波那契数列 * 方法:最优递归, * 测试用例:功能测试(输入3,5,7) * 边界值测试(0,1,2) * 性能测试(输入较大的数字:40,50,100等) * @author dingding * Date:2017-6-15 16:00 * Declaration: All Rights Reserved! */public class Fibonacci {    public static void main(String[] args) {        test1();        test2();        test3();        test4();        test5();    }    //原始的方法    private static long fibonacci_formal(int n){        if (n==0) {            return 0;        }else if (n==1||n==2) {            return 1;        }else {            return fibonacci_formal(n-1)+fibonacci_formal(n-2);        }    }    //计算    private static long fibonacci_n(int n){        int[] result = {0,1};        if (n<2) {            return result[n];        }        long fibNMinusOne = 1;        long fibNMinusTwo = 0;        long fibN = 0;        for (long i=2;i<=n;++i){            fibN = fibNMinusOne+fibNMinusTwo;            fibNMinusTwo=fibNMinusOne;        //先给小的赋值            fibNMinusOne=fibN;        }        return fibN;    }    /*====================测试用例==========================*/    private static void test(){        System.out.println("输入N: ");        Scanner fin = new Scanner(System.in);        int N = fin.nextInt();        System.out.println();        long result = fibonacci_n(N);        System.out.println("结果为: "+result);        System.out.println("=========================");    }    //输入5    private static void test1() {        test();    }    //输入0    private static void test2() {        test();    }    //输入1    private static void test3() {        test();    }    //输入40    private static void test4() {        test();    }    //测试原始方法    private static void test5(){        System.out.println("测试原始方法(递归耗时): ");        long result = fibonacci_formal(20);        System.out.println("结果为: "+result);    }}

有不妥当之处,麻烦告知:D