我已經寫了一個遞歸程序在java中乘以TWO大整數。我將輸入作爲一個字符串並將其存儲在一個int數組中,該數組在每個單元格中保存每個數字,並且我的整個程序在兩個int數組上工作。我的程序適用於1000位數左右的輸入。當我給大約2000位數的輸入時,我的程序停止(在eclipse中)。沒有「未響應」狀態,沒有錯誤/通知消息和沒有輸出。我想知道爲我的程序輸入限制了工作極限大小的問題。是否因爲我使用遞歸而沒有足夠的內存來存儲堆棧幀?java中的大整數乘法(遞歸)在輸入2000位數的大小時停止沒有錯誤。爲什麼?
這裏是我的程序
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;
}
這個函數被調用了多少時間?請稍等一下,看看它實際上工作嗎? –
對於陣列的每個細分看起來都是兩次。自從'n1'剛剛出現以來,我無法告訴你它多少次被調用。 – Makoto
您是否考慮過使用[BigInteger](http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html)? –