用数组计算斐波那契数 [英] Calculating a Fibonacci number with array
问题描述
///我正在学习Java中的递归。
/ **我正在尝试通过使用数组来缩短使用的时间来计算第45个斐波那契数,这不能很好地解决...
错误消息:
线程 main java.lang.ArrayIndexOutOfBoundsException:45
at Auf1.fib2(Auf1.java:25)
at Auf1.main(Auf1.java:49)
** /
// I am learning about recursion in Java. /** I am trying to calculate the 45th Fibonacci number by using an array to shorten the time used, which does not work out well... error message: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 45 at Auf1.fib2(Auf1.java:25) at 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);
}
}
推荐答案
数组索引以0开头。
您将创建一个大小为45的数组。有效的数组索引为0,1 ... 44。在第一次调用fib2时,检查array [45]是否等于-1。数组[45]无效,将导致IndexOutOfBoundException。
The Array indices starts with 0. You create a array of size 45. Valid array indices are 0,1...44. In your first call of fib2 your check if array[45] equals -1. array[45] is not a valid index and will result in an 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)
BTW There is a syntax error. The recursive call should be fib2(n-1) + fib2(n-2)
and not fibo(n-1) + fibo(n-2)
这篇关于用数组计算斐波那契数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!