2012-09-08 22 views
1

我已經寫了一個遞歸程序在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; 
} 
+0

這個函數被調用了多少時間?請稍等一下,看看它實際上工作嗎? –

+0

對於陣列的每個細分看起來都是兩次。自從'n1'剛剛出現以來,我無法告訴你它多少次被調用。 – Makoto

+1

您是否考慮過使用[BigInteger](http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html)? –

回答

0

我得到的輸出的核心,但因爲它是非常大的就不能在控制檯打印。如果我打印它在一個文件中,我可以看到輸出:)

+0

但是,如果我的結果高於24,000位,結果會被分割,只有第一部分(大約24,000個字符)被寫入文件。雖然結果數組中有更多的數字,我可以在調試器中看到。爲什麼????怎樣才能讓我的程序打印整個結果? –

相關問題