2014-09-28 57 views
-1

我想吐int數組並添加元素,但即時獲取錯誤。這是我的代碼。我無法弄清楚。使用遞歸分裂數組java

int arraySize = 10; 
int[] numsToSum = new int[arraySize]; 
for (int i = 0; i < arraySize; i++) 
{ 
    numsToSum[i] = i * 3; 
    System.out.println(numsToSum[i]); 
} 
int sum3 = sumArray3(numsToSum, 0, arraySize - 1); 
System.out.println(sum3); 

public static int sumArray3(int [] array, int start, int end) 
{ 
    int results = 0; 
    int mid = (start + end)/2; 
    if(array.length > 0) 
    { 

     results += sumArray3(array, start + 1, mid) + sumArray3(array, mid +1, end); 

    } 
    return results; 
+0

「我得到的錯誤」 - 很高興知道錯誤和您看到的其他輸出。 – abiessu 2014-09-28 21:00:15

+1

我想知道那些錯誤是什麼。 – 2014-09-28 21:00:24

+0

你的數組總是保持相同的大小。你的遞歸永遠不會結束。你需要檢查是否開始 - > 0 – atlanteh 2014-09-28 21:01:46

回答

3

你沒有遞歸終止條件,在這種情況下我會假設你想檢查的開始和結束計數器陣列是相同的。檢查下面的代碼。

class StackOv { 

    public static void main(String[] args) { 
     int arraySize = 10; 
     int[] numsToSum = new int[arraySize]; 
     for (int i = 0; i < arraySize; i++) 
     { 
       numsToSum[i] = i * 3; 
       System.out.println(numsToSum[i]); 
     } 
     int sum3 = sumArray3(numsToSum, 0, arraySize - 1); 
     System.out.println(sum3); 
    } 

    public static int sumArray3(int [] array, int start, int end) 
    { 
     int results = 0; 
     if(start == end) 
      return array[start]; 
     int mid = (start + end)/2; 
     if(array.length > 0) { 
       results += sumArray3(array, start, mid) + sumArray3(array, mid +1, end); 
     } 
     return results; 
    } 
} 
0

它看起來像你沒有一個「基本情況」,你會返回一個固定值。您的功能將始終返回0

在猜測,我想說你應該開始改變它,以便檢查是否start+1 <= end,如果是,返回您的當前值;該指數如果沒有返回值,用else

else { 
    results = array[start]; 
} 
0

我終於明白了。謝謝你的幫助。我沒有像你說的那樣有一個基地。

public static int sumArray3(int [] array, int start, int end) 
{ 
    int results = 0; 
    int mid = (start + end)/2; 
    if(start < end) 
    { 
     results += sumArray3(array, start, mid) + sumArray3(array, mid +1, end); 

    } 
    else 
     results = array[start]; 
    return results; 
}