我使用以下代码计算斐波那契序列到任意大数字.代码按预期工作,直到我要求它调用函数4,000,000次(之前我只做了几百次)并且计算机运行了一段时间,然后Eclipse中的控制台生成了我粘贴在代码下面的异常.
我的问题是这里发生了什么?我的电脑是否完全没有内存或分配给该线程的内存?如果是这样,为什么它特意停在这个数字?
附加:如何计算Fibonacci序列的更多数字?
import java.math.BigInteger;
public class fibonacci2 {
public static void main(String[] args) {
calculate(p,q);
}
static long i = 0;
static BigInteger p = BigInteger.valueOf(0);
static BigInteger q = BigInteger.valueOf(1);
static BigInteger temp = BigInteger.valueOf(1);
public static void calculate(BigInteger s,BigInteger t){
while(i<4000000){
System.out.printf("%d\t%d\n", p, i);
temp = p;
p = p.add(q);
q = temp;
i++;
calculate(p,q);
}
}
}
Run Code Online (Sandbox Code Playgroud)
例外:
Exception in thread "main" java.lang.StackOverflowError
at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3715)
at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
at java.util.regex.Pattern$Branch.match(Pattern.java:4502)
at java.util.regex.Pattern$Branch.match(Pattern.java:4500)
at java.util.regex.Pattern$Branch.match(Pattern.java:4500)
at java.util.regex.Pattern$BranchConn.match(Pattern.java:4466)
at …Run Code Online (Sandbox Code Playgroud)