如何在 java 中使用具有静态递归方法的实例变量? (累积和问题)
How can I use an instance variable with a static recursive method in java? (cumulative sum problem)
我正在编写一些代码来递归计算两个数字之间的累积和,但是我编写的方法需要更新一个名为“ans”的 would-be 实例变量。
由于我正在查看的问题要求方法 header 为“public static int sumBetween(int a, int b)”,因此我在使用 non-static 此方法的变量。
目前,我将变量 ans 设置为静态,但这当然只能 运行 一次,如果我之后调用该方法,它以变量 ans 开始,它是最后一个答案,而不是 0。
我是递归的新手,所以我会从其中一些问题开始。谢谢!
代码:
/* EXERCISE 2: Cumulative sum
*
* public static int sumBetween(int a, int b)
* The goal is to find the sum of the values from to . In math, we would write this problem as ∑=
*/
static int ans =0;
public static int sumBetween(int a, int b) {
// base case
if (a==b) {
ans = ans +b;
return ans;
}
// recursion
ans = ans + a + b;
return sumBetween(a+1, b-1);
}
为什么要用递归,用数学O(1)复杂度就可以实现目标
Sum of the number between a and b
- Step 1 find sum from 1 to a i.e. (a*(a+1))/2
- Step 2 find sum from 1 to b i.e. (b*(b+1))/2
- Step 3 Subtract out the result of step 2 by step 1 and add a
ans = (b*(b+1)/2) - (a*(a+1)/2) + a
有人在一秒钟前回答但删除了他们的回答 - 无论如何,谢谢陌生人因为它有效:
public static int sumBetween(int a, int b) {
return sumBetweenHelper(a, b, 0);
}
public static int sumBetweenHelper(int a, int b, int ans) {
// base case
if (a==b) {
ans = ans +b;
return ans;
}
// recursion
ans = ans + a + b;
return sumBetweenHelper(a+1, b-1, ans);
}
我正在编写一些代码来递归计算两个数字之间的累积和,但是我编写的方法需要更新一个名为“ans”的 would-be 实例变量。
由于我正在查看的问题要求方法 header 为“public static int sumBetween(int a, int b)”,因此我在使用 non-static 此方法的变量。
目前,我将变量 ans 设置为静态,但这当然只能 运行 一次,如果我之后调用该方法,它以变量 ans 开始,它是最后一个答案,而不是 0。
我是递归的新手,所以我会从其中一些问题开始。谢谢!
代码:
/* EXERCISE 2: Cumulative sum
*
* public static int sumBetween(int a, int b)
* The goal is to find the sum of the values from to . In math, we would write this problem as ∑=
*/
static int ans =0;
public static int sumBetween(int a, int b) {
// base case
if (a==b) {
ans = ans +b;
return ans;
}
// recursion
ans = ans + a + b;
return sumBetween(a+1, b-1);
}
为什么要用递归,用数学O(1)复杂度就可以实现目标
Sum of the number between a and b
- Step 1 find sum from 1 to a i.e. (a*(a+1))/2
- Step 2 find sum from 1 to b i.e. (b*(b+1))/2
- Step 3 Subtract out the result of step 2 by step 1 and add a
ans = (b*(b+1)/2) - (a*(a+1)/2) + a
有人在一秒钟前回答但删除了他们的回答 - 无论如何,谢谢陌生人因为它有效:
public static int sumBetween(int a, int b) {
return sumBetweenHelper(a, b, 0);
}
public static int sumBetweenHelper(int a, int b, int ans) {
// base case
if (a==b) {
ans = ans +b;
return ans;
}
// recursion
ans = ans + a + b;
return sumBetweenHelper(a+1, b-1, ans);
}