如何在 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);
 }