斐波拉契数列 java实现

指的是这样一个数列:

1 1 2 3 5 8 13 21 34 ...

F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

也称黄金分割数列,兔子数列

 

通项公式

(如上,又称为“比内公式”,是用无理数表示有理数的一个范例。)

注:此时 

这样一个完全是自然数的数列,通项公式却是用无理数来表达的。而且当n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618。

1÷1=1,1÷2=0.5,2÷3=0.666...,3÷5=0.6,5÷8=0.625…………,55÷89=0.617977……………144÷233=0.618025…46368÷75025=0.6180339886…...

越到后面,这些比值越接近黄金比.

题目:写一个函数,输入n,求斐波那契数列的第n项为多少?


public class Test {

    public static void main(String[] args) {
        System.out.println("第4项斐波那契数列的值为:"+Fibonacci(4));
    }

    /*
     * 采用递归实现斐波那契数列生成函数,效率低
     */
    public static int generateFibonacci(int n){
        if(n==0)
            return 0;
        if(n==1)
            return 1;
        return generateFibonacci(n-1)+generateFibonacci(n-2);
    }
    
    /*
     * 采用循环实现斐波那契数列
     * 存储数列中间项,求得结果
     */
    public static int fibonacci(int n){
        int[] result={0,1};
        if(n<2)
            return result[n];
        int fibNMinusOne=1;
        int fibNMinusTwo=0;
        int fibN=0;
        for(int i=2;i<=n;i++){
            fibN=fibNMinusOne+fibNMinusTwo;
            fibNMinusTwo=fibNMinusOne;
            fibNMinusOne=fibN;
        }
        return fibN;
    }
}

Java实现

递推方式

 public static void testFibonacci1(int n) {
        int a = 1, b=1, c = 0;
        for (int i = 1; i <= n; i++) {
            if (i == 1) {
                System.out.println("第" + i + "等于" + a);
            }else if (i == 2) {
                System.out.println("第" + i + "等于" + b);
            }else {
                c = a+b;
                a = b;
                b = c;
                System.out.println("第" + i + "等于" + c);
            }
        }
    }

递推方式-数组方式

 public static void testFibonacci2(int n) {
        int[] arrayList = new int[n];
        arrayList[0] = arrayList[1] =1;
        for (int i = 0; i < arrayList.length; i++) {
            if (i == 0) {
                System.out.println("第" + (i+1) + "等于" + arrayList[0]);
            }else if (i == 1) {
                System.out.println("第" + (i+1) + "等于" + arrayList[1]);
            }else {
                arrayList[i] = arrayList[i-1] +arrayList[i-2];
                System.out.println("第" + (i+1) + "等于" + arrayList[i]);
            }
        }
    }

递归方式

 public static int testFibonacci3(int n) {
        if (n == 1 || n == 2) {
            return 1;
        }else {
            return test3(n-1) + test3(n-2);
        }
    }

 

 

 

你可能感兴趣的:(算法)