小编pen*_*ron的帖子

为什么BigInteger最终在Java中的StackOverflowError处于第19635位Fibonacci Sequence中的整数

我使用以下代码计算斐波那契序列到任意大数字.代码按预期工作,直到我要求它调用函数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)

java stack-overflow biginteger fibonacci

3
推荐指数
1
解决办法
670
查看次数

标签 统计

biginteger ×1

fibonacci ×1

java ×1

stack-overflow ×1