OddSum递归练习,不知道怎么做总和

时间:2016-10-26 17:11:47

标签: java recursion

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然后每次递归方法运行它只重置为零,我试图总结所有奇数,它在思考java书中,公共和私人变量没有被引入爱好。

1 个答案:

答案 0 :(得分: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(因为它是最小的奇数&gt; 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