Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 跟踪递归_Java_Recursion - Fatal编程技术网

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;