我只是在热身,我偶然发现了这个:
http://codingbat.com/prob/p145416
这三种方法的区别在于我如何在递归调用中添加 start 参数。
我最初使用列出的第二个函数解决了它,但是它给了我臭名昭著的 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);
}