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

标签 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,那么每次递归方法运行时它都会重置为零,我试图对所有奇数求和,它在think java书中,公共(public)和私有(private)变量还没有被引入还没有。

最佳答案

这可能就是您要找的

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

关于java - OddSum 递归练习,不知道如何求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40268321/

相关文章:

java - Grails:验证文件上传

java - Java中如何计算两个事件之间的时间差?

javascript - 如何在 react.js 中递归渲染子组件

recursion - 使用 Inno Setup PreProcessor 获取源路径及其子目录的文件和大小

java - 协助编写 Java 中对数组列表求和的递归函数

java - 数据结构集、列表、映射还是树?

java - ITextRenderer 不接受 html 的特殊符号

java - 了解HotSpot中的notify方法

algorithm - 计算具有相互依赖关系的递归算法的复杂度

recursion - 计算树中的节点