Java 数组中的值相乘(如果相同)

Java 数组中的值相乘(如果相同),java,Java,我想写一个递归方法,遵循以下逻辑: 假设数组为[3,3,3,3],它将返回值30,因为trail[i]的连续数彼此相等。这里发生的是3+(3*2)+(3*3)+(3*4)=30 另一个例子是[2,4,3],它将返回值9 我希望这是有道理的 有人能帮忙吗?int[]values=newint[]{3,3,3}; int[] values = new int[]{3,3,3,3}; int currentNumber=0,previousNumber=-1,count

我想写一个递归方法,遵循以下逻辑:

假设数组为[3,3,3,3],它将返回值30,因为trail[i]的连续数彼此相等。这里发生的是3+(3*2)+(3*3)+(3*4)=30

另一个例子是[2,4,3],它将返回值9

我希望这是有道理的

有人能帮忙吗?

int[]values=newint[]{3,3,3};
        int[] values = new int[]{3,3,3,3};
        int currentNumber=0,previousNumber=-1,count=1,sum=0;

        for(int i = 0; i<values.length;i++,previousNumber = currentNumber){
            currentNumber = values[i];
            if(currentNumber == previousNumber){
                count++;
            }else{
                count=1;
            }
            sum += currentNumber*count;
        }
        System.out.println("Sum : " + sum);
int currentNumber=0,previousNumber=-1,count=1,sum=0; 对于(inti=0;i您可以这样尝试

  int sum(int pos, int[] trail, int cnt) {
    if (pos >= trail.length) {   // when full array traversed
      return 0;
    }
    if (pos != 0 && trail[pos - 1] == trail[pos]) {         // if previous element is same 
      return (cnt + 1) * trail[pos] + sum(pos + 1, trail, cnt + 1);
    } else {                                                // first element or prev not same
      return trail[pos] + sum(pos + 1, trail, 1);
    }
  }

用这种方法调用sum(0,trail,0)
为什么需要递归

简单循环应该完成以下工作:

public int sum(int[] arr) {
    int sum = 0;
    for (int i = 0, p = 0; i < arr.length; i++) {
        if (i == 0 || arr[i] == arr[i - 1]) {
            p++;
        } else {
            p = 1;
        }
        sum += arr[i] * p;
    }
    return sum;
}

正如其他人已经提到的,这可以很容易地编写为一个交互函数,而不使用递归,但是如果出于某种原因,您仍然需要一个递归函数,那么它将如下所示:

int recursiveHelper(int[] nums, int index, int pow){
if(index >= nums.length) return 0;

if(index == 0)
  return nums[0] + recursiveHelper(nums, index+1,0);
else{
    if(nums[index] == nums[index-1])
       return nums[index] * pow + recursiveHelper(nums, index, pow+1);
    else
       return nums[index] + recursiveHelper(nums, index+1,0);

   }

}
请注意我们如何传递pow变量来跟踪整数的重复。如果一个数字不等于它以前的数字,我们将忽略pow并将其设置为0。如果它等于以前的数字,我们将递增pow并调用递归函数


注意:我没有执行此操作,这里可能有一些输入错误和错误,但这应该会让您了解如何开始。

是的,当然,这似乎是最好的方法
int recursiveHelper(int[] nums, int index, int pow){
if(index >= nums.length) return 0;

if(index == 0)
  return nums[0] + recursiveHelper(nums, index+1,0);
else{
    if(nums[index] == nums[index-1])
       return nums[index] * pow + recursiveHelper(nums, index, pow+1);
    else
       return nums[index] + recursiveHelper(nums, index+1,0);

   }

}