2015-11-06 96 views
0

我需要編寫一個遞歸方法來計算數組中奇數整數的數量。計算數組中奇數整數數的遞歸方法

這裏是我到目前爲止的代碼:

public static int countOdd(int[] numbers, int startIndex, int endIndex) { 
    if (startIndex == endIndex) { 
     if (numbers[startIndex] % 2 != 0) { 
      return 1; 
     } else { 
      return 0; 
     } 
    } else { 
     return countOdd(numbers, startIndex, endIndex - 1); 
    } 
} 
+1

什麼是你的代碼中的問題? – RealSkeptic

+0

你可能不需要startIndex被傳遞,並且你不需要外部的else在內部你可以在返回語句中做遞歸調用 – dharam

+0

它保持retu不管是什麼@RealSkeptic – Suds2

回答

1

你的遞歸行不正確:

return countOdd(numbers, startIndex, endIndex - 1); 

你已經失去了endIndex的是奇數。這將有助於:

return countOdd(numbers, startIndex, endIndex - 1) + 
    countOdd(numbers, endIndex, endIndex); 

而且我不知道,如果你調用它的權利,我假定這將是:

countOdd(numbers, 0, numbers.length-1); 

解釋器:爲了瞭解如何執行它,你需要打破這個問題。如果我想在陣列遞歸計數奇數:

[a, b, c, d, e, f, g, .... z] 

上述基本的代碼執行此:

countOdd([a, b, c, d, e, f, g, ...y]) + countOdd([z]) 

通知第二個操作數將返回0或1,因爲子集的大小爲1的。第一個操作數基本上是長度1更小。遞歸繼續:

countOdd([a, b, c, d.... x]) + countOdd([y]) + countOdd([z]) 
... 
countOdd([a]) + countOdd([b]) + countOdd([c]) + ... countOdd([z]) 

而且一旦它們都是大小爲1的子集,它就可以計算它。

0 + 1 + 0 + 1 + 1 .. 

並返回單個計數的奇數結果。

附加說明:注意,遞歸可以做不同的,但還是拿出了同樣的結果(例如:

return countOdd(numbers, startIndex, startIndex) + 
    countOdd(numbers, startIndex + 1, endIndex); 
+0

謝謝你的作品。我仍然不明白,但 – Suds2

+0

哪一部分你不明白? – ergonaut

+0

遞歸部分?它甚至返回什麼? – Suds2

0

能不能請你:

<your main class>{ 
    //global variables 
    int index = 0; 
    int[] array = {1,2,3,4,5}; 
    int counter = 0; 
    int totalOfOddNumbers = countOddIntegers(index); 

    System.out.println(totalOfOddNumbers); 
} 

private int countOddIntegers(int i){ 
    if (array[i] == 1) || (array[i]%2 != 0) counter ++; 
    if (i != array.length - 1) return countOddIntegers(i+1); 
    else return counter; 
}