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吗?它不应该在返回该值之前停止吗?谢谢。这很有意义。