java - java 中的大整数乘法(递归)在输入 2000 位数字量级时停止,不会出现错误。为什么?

标签 java recursion biginteger

我用java编写了一个递归程序来乘以两个大整数。我将输入作为字符串获取,并将其存储在一个 int 数组中,该数组在每个单元格中保存每个数字,并且我的整个程序在两个 int 数组上运行。我的程序适用于 1000 位左右的输入。当我输入大约 2000 位数字时,我的程序就会停止(在 Eclipse 中)。没有“未响应”状态,没有错误/通知消息,也没有输出。我想知道限制程序输入的工作限制大小的问题是什么。是否因为我使用递归而没有足够的内存来存储堆栈帧?

这是我的程序的核心

private int[] bigInt(int[] a, int[] b, int expo) {
    if(n1==1)
    {
        result=multiply(a[a.length-1],b[a.length-1]);
        if(expo!=0)
            result=exponential(result,expo);
    }
    else
    {
        int A1[]=divideArray(a,0,n1/2);
        int A2[]=divideArray(a,n1/2,n1);
        int B1[]=divideArray(b,0,n2/2);
        int B2[]=divideArray(b,n2/2,n2);
        int tempA[]=bigInt(A1,B1,0);
        int A[]=exponential(tempA, n1);

        int[] addB=addArray(B1,B2);
        int[] addA=addArray(A1,A2);
        int Byet[]=bigInt(addA,addB,0);
        int C[]=bigInt(A2,B2,0);
        int B[]=subArray(Byet,tempA,C,n1/2);

        result=addArray(A,addArray(B,C));
    }

    return result;
}

最佳答案

我得到了输出,但由于它非常大,因此无法在控制台中打印。如果我将其打印在文件中,我可以看到输出:)

关于java - java 中的大整数乘法(递归)在输入 2000 位数字量级时停止,不会出现错误。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12332698/

相关文章:

java - JAXB 的内存泄漏

java - AES加密解密无法正常工作--Android

java - 使用 Java 的并行性来解决递归函数

.net - (反向?)树枚举

java - BigInteger.pow 和 BigInteger.isProbablePrime 的复杂度是多少?

java - 通信链路故障 - 从服务器成功接收到的最后一个数据包是

java - Android socket读取慢

recursion - 如何在 Go 中递归闭包?

java - 阶乘程序没有给出正确的输出

php - MySQL 中的 BIGINT 更改我的号码?为什么要这样做?