Java 跟踪递归
我正在学习递归,在跟踪递归方面有困难。 这是我的问题,我有一个很好的解决方案。 我被困在某个点上,无法继续追踪 问题: 给定一个整数数组,是否可以选择一组整数,使该组与给定目标求和 解决方案:Java 跟踪递归,java,recursion,Java,Recursion,我正在学习递归,在跟踪递归方面有困难。 这是我的问题,我有一个很好的解决方案。 我被困在某个点上,无法继续追踪 问题: 给定一个整数数组,是否可以选择一组整数,使该组与给定目标求和 解决方案: public static boolean groupSum1(int start, int[] nums, int target) { if (start >= nums.length) return (target == 0);
public static boolean groupSum1(int start, int[] nums, int target)
{
if (start >= nums.length) return (target == 0);
if (groupSum1(start + 1, nums, target - nums[start])) return true;
if (groupSum1(start + 1, nums, target)) return true;
return false;
}
start=0(我们必须在其中启动阵列)
nums[]={10,8,6}目标=16
请帮我追踪问题?先给行编号
public static boolean groupSum1(int start, int[] nums, int target)
{
1. if (start >= nums.length) return (target == 0);
2. if (groupSum1(start + 1, nums, target - nums[start])) return true;
3. if (groupSum1(start + 1, nums, target)) return true;
4. return false;
}
以下是执行情况(假设这是您要求的):
1调用groupSum1(0,{10,8,6},16)
1.0<3下一步
2调用groupSum1(1,{10,8,6},6)
1.1<3下一步
3调用groupSum1(2,{10,8,6},-2)
1.2<3下一步
4调用groupSum1(3,{10,8,6},-8)
1.3==3返回false调用3
返回第2行呼叫3。
5调用groupSum1(3,{10,8,6},-2)
1.3==3返回false调用3
返回第3行呼叫3。
返回false调用2
返回第2行呼叫2。
6调用groupSum1(2,{10,8,6},6)
2<3下一步
7调用groupSum1(3,{10,8,6},0)
3==3返回true调用6
返回第2行呼叫6。
返回true以调用2
返回第3行呼叫2。
返回true以调用1
返回第2行呼叫1。
返回真值
递归调用前面的数字只是我用来跟踪深度的索引。我希望它是可以理解的。将代码看作是不断调用函数,直到它达到目标(或
false
)为止,这可能会有所帮助。“最内层”调用的结果将返回true
(或target==0
)
在此情况下,将满足或不满足以下条件:
if (groupSum1(start + 1, nums, target - nums[start])) return true;
if (groupSum1(start + 1, nums, target)) return true;
“追踪”是什么意思?你的目标是什么?这是一个NP完全问题,对吗?@JProgrammer问题陈述有点泄露了验证器。此外,“PlatinumAzure”他可能指的是追踪,即说明每个变量在重要点上是什么。我们在IB Comp Sci中经常这样做,但通常不用于递归。非常感谢。这真的很有帮助。
if (groupSum1(start + 1, nums, target - nums[start])) return true;
if (groupSum1(start + 1, nums, target)) return true;