Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用数组计算斐波那契数_Java_Arrays_Fibonacci - Fatal编程技术网

Java 用数组计算斐波那契数

Java 用数组计算斐波那契数,java,arrays,fibonacci,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 sta

//我正在学习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);
    }
}
公共类Auf1{
公共静态长[]费尔德;
公共静态长fib2(长n){
如果((n==1)|(n==2)){
返回1;
}否则{
如果(feld[(int)n]!=-1){
返回字段[(int)n];
}否则{
长期结果=fibo(n-1)+fibo(n-2);
feld[(int)n]=结果;
返回结果;
}
}
}
公共静态void main(字符串[]args){
长n=45;
费尔德=新长[(int)n];
对于(int i=0;i
数组索引以0开头。 创建一个大小为45的数组。有效数组索引为0,1…44。在fib2的第一次调用中,检查数组[45]是否等于-1。数组[45]不是有效索引,将导致IndexOutOfBoundException

更改以下行:

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

线路呢

feld[(int) n] = result 


顺便说一句,有一个语法错误。递归调用应该是
fib2(n-1)+fib2(n-2)
,而不是
fibo(n-1)+fibo(n-2)

将数组放大一个元素:
feld=new long[(int)n+1](有效索引从0到长度-1)是否必须使用数组?你必须存储斐波那契序列的先验计算吗?当然,迭代的方法要快得多,但是接触动态规划是一个很好的实践
feld[(int) n] = result 
feld[(int) n - 1] = result;