数组元素的递归总数等于目标java

数组元素的递归总数等于目标java,java,arrays,recursion,Java,Arrays,Recursion,我试图将数组中的元素相加,并检查总数是否等于目标值,在本例中为24。方法必须是递归的 这里是第一个需要私有助手方法的方法 public boolean isSum24(int arr[]) { return isSum24(arr, 24); } 这就是我迄今为止所尝试的。总数不起作用。有什么建议吗 private boolean isSum24(int arr[], int targetSum) { int n = 1, total = 0; if(arr.l

我试图将数组中的元素相加,并检查总数是否等于目标值,在本例中为24。方法必须是递归的

这里是第一个需要私有助手方法的方法

public boolean isSum24(int arr[])
{
    return isSum24(arr, 24);
}
这就是我迄今为止所尝试的。总数不起作用。有什么建议吗

    private boolean isSum24(int arr[], int targetSum) {
    int n = 1, total = 0;
    if(arr.length <=0)
        return false;
    if(n > arr.length)
        //break;

    total = arr[n] + isSum24(arr, targetSum);

        //total = arr[n]+ isSum24(arr[n-1], n-1);
    if(total == targetSum)
        return true;
    return false; //change this line of code as needed.
}
private boolean isSum24(int arr[],int targetSum){
int n=1,总计=0;
if(arr.length arr.length)
//中断;
总计=arr[n]+isSum24(arr,targetSum);
//总计=arr[n]+ISUM24(arr[n-1],n-1);
如果(总计==targetSum)
返回true;
return false;//根据需要更改这行代码。
}

@Gustavo这是你可以做的事情:

递归需要:
  • 基本情况
  • 诱导步骤
你的基本情况是什么?在这种情况下,数组长度小于或等于零。你的入职步骤是什么?在这里:

total=arr[n]+isSum24(arr,targetSum)

您正在
isSum24(arr,targetSum)中运行相同的函数,导致无限循环(或者这就是应该发生的事情)

您应该从数组中删除
arr[n]
,或者使用
Arrays.copyOfRange(array,start,stop)
制作副本。希望这有帮助

此外,还需要在内部方法中更改targetSum

public boolean isSum24(int arr[])
{
    return isSum24(arr, 24);
}

这将是我的代码,如果你真的需要它

 private boolean isSum24(int arr[], int targetSum) {
      if(arr.length == 1){
              return arr[0] = targetSum; //base case
      } 
      return isSum24(Arrays.copyOfRange(arr, 1, arr.length), targetSum - arr[0]); //induction step
 }    
有人能更好地格式化我的代码



第一个帖子。向帖子评论问题。谢谢。

如果我们以非递归方式实现该问题-

private static boolean sum(int[] array, int sum){
    int total = 0;
    for(int i=0;i<array.length;i++){
        total += array[i];
    }
    return total == sum;
}

问题是什么?它不起作用,我合计的行不起作用。我认为您应该递归地计算数组的和,然后将结果与给定的数字进行比较。
boolean isSum24(int[],int)
不返回数字。因此,行
total=arr[n]+isSum24(arr,targetSum)对我来说没有任何意义。什么是
2+true
?感谢您的指导,这解释了为什么返回不起作用。我只想将两个参数传递到private helper方法中,只返回(arr[],target)。