Java 如何防止递归斐波那契序列生成的值超过4000000?

Java 如何防止递归斐波那契序列生成的值超过4000000?,java,Java,这是我的密码: public class EvenFibonacciNumbers { //0 1 1 2 3 5 8 13 21 34 public static void main(String args[]){ int index = 0; while (true){ System.out.println(fibonacci(index)); index++; } } p

这是我的密码:

public class EvenFibonacciNumbers {
//0 1 1 2 3 5 8 13 21 34
    public static void main(String args[]){
        int index = 0;
        while (true){
            System.out.println(fibonacci(index));
            index++;
        }
    }
    public static long fibonacci(int i){ //i is our index value
        //We will do this by recursion.
        //We know that if our index is 0, it will return 0.
        if(i == 0) return 0;
        //We know that if our index is 1 or 2, it will return 1.
        if (i <= 2) return 1;
        //Now we need to determine what would happen if our index is greater
        //than 2.
        long fibTerm = fibonacci(i-1)+fibonacci(i-2);
        return fibTerm;
    }
}
公共类偶数{
//0 1 1 2 3 5 8 13 21 34
公共静态void main(字符串参数[]){
int指数=0;
while(true){
System.out.println(斐波那契指数);
索引++;
}
}
公共静态长fibonacci(inti){//i是我们的索引值
//我们将通过递归来实现这一点。
//我们知道,如果我们的索引为0,它将返回0。
如果(i==0)返回0;
//我们知道,如果我们的索引是1或2,它将返回1。

如果(i添加一个局部变量
fiberm
来存储计算的最后结果,请检查结果是否超过您的限制
4000000
,然后打印结果

public static void main(String args[]){
    int index = 0;
    long fibterm = 0;
    while ((fibterm = fibonacci(index++)) < 4000000){
        System.out.println(fibterm);
    }
}
publicstaticvoidmain(字符串参数[]){
int指数=0;
长期=0;
而((fiberm=fibonacci(index++)<4000000){
系统输出打印项次(fibterm);
}
}

添加一个局部变量
fiberm
以存储上次计算结果,检查结果是否超出限制
4000000
,然后打印结果

public static void main(String args[]){
    int index = 0;
    long fibterm = 0;
    while ((fibterm = fibonacci(index++)) < 4000000){
        System.out.println(fibterm);
    }
}
publicstaticvoidmain(字符串参数[]){
int指数=0;
长期=0;
而((fiberm=fibonacci(index++)<4000000){
系统输出打印项次(fibterm);
}
}

第一个:不要这样做。递归斐波那契计算器的运行时间为
O(n^2)
,这将使较大的
n
的整个计算速度非常慢。这个问题可以很容易地用线性方式解决。此外,线性方法将简化引入上限的过程。@Paul迭代将是更实用的方法?是的。您需要的内存要少得多,没有任何递归方法-c总之,就终止所需的时间而言,这是一种更有效的执行方式,并且不会影响代码的可理解性。@Paul谢谢,我将尝试这样做。第一个:不要这样做。递归斐波那契计算器的运行时将为
O(n^2)
,这将使较大的
n
的整个计算速度非常慢。这个问题可以很容易地用线性方式解决。此外,线性方法将简化引入上限的过程。@Paul迭代将是更实用的方法?是的。您需要的内存要少得多,没有任何递归方法-c总之,就终止所需的时间而言,这是一种更有效的执行方式,并且不会影响代码的可理解性。@Paul谢谢,我将尝试此方法。好的,当我这样做时,我被迫使用fibonacci(索引)到int。当我运行它时,我会得到一个0的列表。你知道为什么当我运行它时,它给我的最后一个值是:5702887吗?它不应该在返回该值之前停止吗?谢谢。这很有意义。好吧,当我这样做时,我被迫转换斐波那契(索引)到int。当我运行它时,我得到一个0的列表。你知道为什么当我运行它时,它给我的最后一个值是:5702887吗?它不应该在返回该值之前停止吗?谢谢。这很有意义。