我只是做了熱身,我偶然發現了這一點:一個神祕的計算器錯誤?
http://codingbat.com/prob/p145416
三種方法之間的區別是我如何添加到啓動參數的遞歸調用。
我最初解決它與列出的第二個函數,但它給了我臭名昭着的stackoverflow錯誤。第一個不給我一個stackoverflow錯誤。這個網站有什麼問題,或者是否存在差異1和2,即微妙的Java語言片段?
public boolean groupSum(int start, int[] nums, int target) {
if (start >= nums.length)
return (target == 0);
return groupSum(start+1, nums, target - nums[start]) || groupSum(start+1,
nums, target);
}
------------這些原因在流誤差堆--------------
public boolean groupSum(int start, int[] nums, int target) {
if (start >= nums.length)
return (target == 0);
return groupSum(start++, nums, target - nums[start]) || groupSum(start++,
nums, target);
}
public boolean groupSum(int start, int[] nums, int target) {
if (start >= nums.length)
return (target == 0);
return groupSum(++start, nums, target - nums[start]) || groupSum(++start,
nums, target);
}
有沒有什麼神祕的stackoverflow錯誤,它只是意味着你的遞歸方法從未停止。爲什麼?可能是因爲基礎案例的錯誤設計。另外,請不要說這隻發生在Java *中,它也可能發生在其他編程語言上。 –
我也意識到這些函數是如何失效的,因爲它們具有O(2^n)的複雜性。我正在做一個面試的熱身,需要練習遞歸。 – LLL
這三個函數都具有相同的基本情況。他們只是在我如何添加開始不同。我會澄清這個問題。 – LLL