[英]Modifying Summation using Recursion
如何修改使用递归定义获得的1总和求和法N
-通过(1 to N/2)
+ ((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;
}
首先,您的实现不是递归的。
您的问题提出了正确的算法:要将1和n
之间的值相加,可以将1和n/2
之间的值相加,然后将n/2 + 1
和n
之间的值相加。 这意味着我们需要创建一个辅助函数sum(int a, int b)
其目标是返回a
和b
之间所有值a
和。
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.