在Java中使用for循环在斐波那契序列中找到第n个项

时间:2018-10-31 05:50:30

标签: java for-loop

我需要专门使用for循环来查找斐波那契序列中的第n个项。我试图这样做,以便主方法告诉方法generateFibonnaci它需要找到的第n个项,并将n分配为第二个for循环的极限,这将递归地找到第n个项,直到极限数n。例如,当输入为2时,计划让Fibonacci公式运行两次并返回1,但在这种情况下返回5。我怀疑问题出在for循环的参数之内,但我不确定。

class Fibonnaci
{
    public static int generateFibonacci(int input)
    {
        int num1 = 0;
        int num2 = 1;
        int fibonacci = 0;
        int n = 0;

        for(int i = 0; i < input; i++)
        {
            n = input;

            for(int j = 0; j < n; j++)
            {
                fibonacci = num1 + num2;
                num1 = num2;
                num2 = fibonacci;
            }
        }

        return fibonacci;
    }

    public static void main(String [] args)
    {
        int [] inputs = {1, 2, 3, 4, 5, 6, 11, 16, 21, 31, 41, 46, 1, 1, 2, 11};

        for(int i = 0; i < inputs.length; i++)
        {
            System.out.println(generateFibonacci(inputs[i]));
        }
    }
} 

3 个答案:

答案 0 :(得分:2)

您必须更改for循环。

for(int i = 0; i < input - 1; i++) {
    fibonacci = num1 + num2;
    num1 = num2;
    num2 = fibonacci;
}

这足够了。

答案 1 :(得分:0)

只是代替

n = input;

use this:

n = i;

在输出中打印负值的原因是 int不能在其中存储大量数字。由于int的大小。 我们正在处理的斐波那契数列从0开始。

答案 2 :(得分:0)

这应该是您问题的答案。

for (int j = 1; j <= input; j++) {
        if (j == 1) {
            fibonacci = num1;
            continue;
        }
        if (j == 2) {
            fibonacci = num2;
            continue;
        }
        fibonacci = num1 + num2;
        num1 = num2;
        num2 = fibonacci;
    }

不要使用外部for循环。