使用Big Integer堆栈溢出

时间:2016-10-29 04:45:07

标签: java recursion biginteger

我正在处理大量的BigIntegers以及递归,这会导致堆栈溢出。有什么方法可以让我解决这个问题,还是有什么我做错了导致这个堆栈溢出?

import java.math.BigInteger;
import java.util.Random;

public class Recur {


public static void main(String[] args) {


    BigInteger n, m;

    Random r = new Random();

    for (int i = 0; i < 500; i++) {
        n = new BigInteger((80 - 70) + 70, r);
        int num1 = n.intValue();
        m = new BigInteger((80 - 70) + 70, r);
        int num2 = m.intValue();


        System.out.println("N: " + n + " " + "M: " + m);
        System.out.println("Recursive GCD: " + recursiveGCD(num1, num2));           
        System.out.println("Iterative GCD: " + iterativeGCD(num1, num2));
    }

}

public static int recursiveGCD(int n, int m) {
    if (n == 0)
        return m;
    else if (m == 0)
        return n;
    else if (n > m)
        return recursiveGCD(n % m, m);
    else if (m < n)
        return recursiveGCD(n, m % n);
    else 
        return n;

}

public static int iterativeGCD(int n, int m) {
    while (n != 0 && m != 0) {
        if (n > m)
            n = n % m ;
        else if (m > n)
            m = m % n;
        else
            return n;
    }

    if (n == 0)
        return m;
    else
        return n;


    }

}

1 个答案:

答案 0 :(得分:-1)

您正在获得堆栈溢出,因为您的操作系统中的堆栈旨在为每个正在运行的程序存储有限数量的内存地址。

也许BigInt有一个特别的影响,但我认为你可以通过制作一个线性程序摆脱这个错误。