你的遞歸行不正確:
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);
什麼是你的代碼中的問題? – RealSkeptic
你可能不需要startIndex被傳遞,並且你不需要外部的else在內部你可以在返回語句中做遞歸調用 – dharam
它保持retu不管是什麼@RealSkeptic – Suds2