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