ちょうどウォーミングアップをしていて、これに出くわしました:
http://codingbat.com/prob/p145416
3 つのメソッドの違いは、再帰呼び出しで start パラメーターを追加する方法です。
最初にリストされた2番目の関数で解決しましたが、悪名高い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);
}