【问题标题】:Fibonacci Algorithm in JavaJava中的斐波那契算法
【发布时间】:2013-01-15 16:13:38
【问题描述】:

我正在尝试解决算法类的作业问题,并且我不断得到我在下面编写的代码的越界索引数组。我一直在尝试在 Python 中使用它,因为我对此很满意,但我似乎遇到了类似的例外。谁能给我一个提示我在哪里出错了?

public class Fibonacci1 {
    public static long F(int N) {
        long a[]  = new long [100];
        a[0] = 0; /*sets up first 2 digits in the sequence*/
        a[1] = 1;
        if (N<2) {   
            return N;
        }
        a[N] = a[N-1] + a[N-2]; /*appends F num for next number in the list*/
        N++; 
        return a[N]; /*should return the last number*/
    }
    public static void main(String[] args) {
        for (int N = 0; N<100; N++)
            StdOut.println(N+" " + F(N));
    }
}

【问题讨论】:

标签: java fibonacci


【解决方案1】:

N == 99,你在方法F中做了一个N++,然后你调用return a[N],即return a[100]

【讨论】:

  • 为了更清楚一点:可以容纳 100 个元素的数组的索引为 0 到 99,因此索引 100 超出范围。
【解决方案2】:

代码需要稍作改动。你没有得到正确的序列打印出来,因为数组是一个局部变量,应该是一个静态变量。 n++ 也应该被删除。下面的代码并不漂亮,但它可以工作。

public class Fibonacci1 {
    static long a[] = new long[100];

    public static long F(int N) {
        a[0] = 0; /* sets up first 2 digits in the sequence */
        a[1] = 1;
        if (N < 2) {
            return N;
        }
        a[N] = a[N - 1] + a[N - 2]; /* appends F num for next number in the list */
        return a[N]; /* should return the last number */
    }

    public static void main(String[] args) {
        for (int N = 0; N < 100; N++)
            System.out.println(N + " " + F(N));
        }
}

【讨论】:

  • 是的,做到了。很抱歉用一个 Fib 问题打扰 SO 社区,在我问任何人之前,我真的试着花一些时间来解决这个问题。我知道程序员讨厌基本问题,尤其是 Fib!
  • 没问题。在盯着我们的代码之前,我们都去过那里。祝你好运。
【解决方案3】:

从 F-Function 中删除 N++ 语句。

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 2013-03-31
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多