数组中的斐波那契迭代移动[]

Fibonacci Iterative Move In Array[]

我的目标是编写一个显示斐波那契数列如何移动的方法。我必须使用数组和方程来显示数字如何在数组上移动(因此使用斐波那契方法迭代值:前一个数字 + 当前数字 = 下一个数字)。

这是我想用数组[]表示的逻辑:

    n = fibonacci number
    i = 1;
    previousNumber = 0 
    nextNumber = 1 
    sum = previousNumber + nextNumber;
    while (i <= n) {
    sum = previousNumber + nextNumber;
    previousNumber = nextNumber;
    nextNumber = sum;

return nextNumber;

我走到这一步却卡住了:

long fibonacci(int fibonacci) {
    int[] fib = new int[20];
    if (fibonacci < 0) {
        throw new IllegalArgumentException("n value cannot be negative number");
    }
    if (fibonacci == 0 || fibonacci == 1) {
        return 1;
    }
    fib[0] = 1;
    fib[1] = 1;
    int i ;
    for (i = 2; i < fibonacci; i++) {
        fib[i] = fib[0] + fib[1];
        fib[0] = fib[1];
        fib[1] = fib[i]; 
    }
    return fib[i];
}

返回值似乎没问题。在斐波那契测试中,来自 5 的 fib 是 5,4 是 3。让我担心的是这个字符串在调试器上的外观。我移动它们的方式使它们看起来像这样:{3,5,2,3,5} 应该是 {1,1,2,3,5}。

你的循环是错误的。应该是:

for (i = 2; i <= fibonacci; i++) {
    fib[i] = fib[i-1] + fib[i-2];
}
return fib[i-1];

永远不要更改fib[0]fib[1]fib[i]应该是前两个元素的总和。

如果目标是在没有数组的情况下计算 fib(i),您将需要两个变量来跟踪最后两个值:

long fibonacci(int fibonacci) {
    if (fibonacci < 0) {
        throw new IllegalArgumentException("n value cannot be negative number");
    }
    if (fibonacci == 0 || fibonacci == 1) {
        return 1;
    }
    int beforeLast = 1;
    int last = 1;
    int i;
    int fib = 1;
    for (i = 2; i <= fibonacci; i++) {
        fib = last + beforeLast;
        beforeLast = last;
        last = fib;
    }
    return fib;
}

你不需要数组。

long fibonacci(int fibonacci) {
    if (fibonacci < 0) {
        throw new IllegalArgumentException("n value cannot be negative number");
    }
    if (fibonacci == 0 || fibonacci == 1) {
        return 1;
    }
    first = 1;
    second = 1;
    sum i;
    for (i = 2; i <= fibonacci; i++) {
        sum = first + second;
        first  = second;
        second = sum; 
    }
   return sum;
}

这个实现更简单,更易读。

您的方法应该如下所示:

static long fibonacci(int fibonacci) {
        int[] fib = new int[20];
        if (fibonacci < 0) {
            throw new IllegalArgumentException("n value cannot be negative number");
        }
        if (fibonacci == 0 || fibonacci == 1) {
            return 1;
        }
        fib[0] = 1;
        fib[1] = 1;
        int i;
        for (i = 2; i < fibonacci; i++) {
            fib[i] = fib[i - 1] + fib[i - 2]; // change here
        }
        return fib[i-1]; // change here
    }