用数组计算Fibonacci数

时间:2014-10-19 20:28:37

标签: java arrays fibonacci

//我正在学习Java中的递归。         / **我试图通过使用数组来缩短所用的时间来计算第45个斐波纳契数,但效果不佳...         错误信息:         线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:45             在Auf1.fib2(Auf1.java:25)             在Auf1.main(Auf1.java:49)         ** /

public class Auf1 {

    public static long[] feld;

        public static long fib2(long n) { 
            if ((n == 1) || (n == 2)) {
                return 1;
            } else {
                if (feld[(int) n] != -1) {
                    return feld[(int) n];
                } else {
                    long result = fibo(n - 1) + fibo(n - 2);
                    feld[(int) n] = result;
                    return result;
                }
            }
        }

public static void main(String[] args) {
     long n = 45;
     feld = new long[(int) n];
        for (int i = 0; i < n; i++) {
            feld[i] = -1;
        }
        long result = fib2(n);
        System.out.println("Result: " + result);
    }
}

1 个答案:

答案 0 :(得分:1)

数组索引从0开始。 您创建一个大小为45的数组。有效的数组索引是0,1 ... 44。在第一次调用fib2时,检查数组[45]是否等于-1。 array [45]不是有效的索引,会导致IndexOutOfBoundException。

更改以下行:

(feld[(int) n] != -1)

(feld[(int) n - 1] != -1)

和行

feld[(int) n] = result 

feld[(int) n - 1] = result;

BTW语法错误。递归调用应该是fib2(n-1) + fib2(n-2)而不是fibo(n-1) + fibo(n-2)