有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java OddSum递归练习,不知道如何求和

public class OddSum {

    public static int oddSum(int n) {

        int totalSum;

        if (n % 2 != 0 && n > 0) {
            totalSum = totalSum + n;
            System.out.println(totalSum);
            return oddSum(n - 1);
            //System.out.println(totalSum);
            //return 1;
        } else {
            if (n == 0) {
                System.out.println(totalSum);
                return totalSum;
            } else {
                return oddSum(n - 1);
            }
        }
    }

    public static void main(String[] args) {
        oddSum(13);
    }
}

我有点困惑,如果我指定totalSum=0,那么每次递归方法运行时它都会重置为零,我试图对所有奇数求和,在think java书中,还没有引入公共和私有变量


共 (1) 个答案

  1. # 1 楼答案

    这可能就是你要找的

    public static int oddSum(int n) {
        if (n == 1) {
            return 1;
        } else {
            return (n % 2 != 1) ? oddSum(n - 1) : oddSum(n - 1) + n;
        }
    }
    

    解释

    正如您已经注意到的,不建议将totalSum分配给递归方法中的某个值,因为每次该方法运行时它都会被重置。你要做的是

    • 定义一个基本情况,在本例中为if (n == 1)。递归在这里停止,结果返回1(因为它是最小的奇数>;0)

    • 定义一个递归步骤return (n % 2 != 1) ? oddSum(n - 1) : oddSum(n - 1) + n,该步骤在每次方法尚未到达基本情况时调用。在这一步中,应用条件n % 2 != 1,并检查数字是偶数还是奇数。如果n是偶数,只需使用下一个较小的数字oddSum(n - 1)调用该方法即可。否则——如果n是奇数——仍然使用下一个较小的数字调用该方法,但这次将奇数n的值添加到它:oddSum(n - 1) + n