如何使用递归定义修改求和方法,以便通过 - N
+ (1 to N/2)
获得1到((N/2+1) to N)
之和?
我在这里有点困惑,我已经输入了类似的东西,但这不是递归:
public static int Sum(int n){
int sum1 = 0;
int sum2 = 0;
int totalSum = 0;
for(int i = 1; i <= n/2; i++){
sum1 += i;
}
for(int i = n/2 + 1; i <= n; i++){
sum2 += i;
}
totalSum = sum1 + sum2;
return totalSum;
}
答案 0 :(得分:4)
首先,你的实现不是递归的。
您的问题说明了正确的算法:要将1和n
之间的值相加,您可以将它们加到1和n/2
之间,然后加到n/2 + 1
和n
之间。这意味着我们需要创建一个辅助函数sum(int a, int b)
,其目标是返回a
和b
之间所有值的总和。
a == b
:在这种情况下,帮助者应该只返回a
。a
到(a+b)/2
求和,从(a+b)/2 + 1
求和到b
。这将是一个实现:
public static int sum(int a, int b) {
if (a == b) {
return a;
}
int middle = (a + b) / 2;
return sum(a, middle) + sum(middle + 1, b);
}
这样,初始任务变为:
public static int sum(int n) {
return sum(1, n);
}
一些样本:
public static void main(String[] args) {
System.out.println(sum(4)); // prints 10
System.out.println(sum(5)); // prints 15
System.out.println(sum(6)); // prints 21
}