当前位置: 首页 > 知识库问答 >
问题:

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

贺皓
2023-03-14
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);
    }
}

我有点困惑,如果我分配总计=0,那么每次递归方法运行时,它都会重置为零,我试图求和所有的奇数,它在思想java书中,公共和私有变量还没有被引入。

共有1个答案

孙玮
2023-03-14

这可能就是你要找的

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

解释

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

>

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

 类似资料:
  • 4.31(选择排序)选择排序查找数组中的最小元素。然后将最小元素与数组中第一个元素交换。从第二个数组元素开始的子数组重复这个过程。每一次都把一个元素放到正确的位置。这种排序与冒泡排序相似,对于n个元素的数组,要 n-l 遍,对每个子数组,要用n-1次比较以求得最小值。处理包含一个元素的子数组时,数组已经排序完毕。编写递归函数 selectionSort,完成这个算法。 4.32(回文)回文就是正读

  • 对于,我被赋予和。 现在给定N、A、B、C和X,如何有效地找到所有N个元素? 我需要把这N个元素分成2组,其中最大的元素在第一组,第二大的元素在第二组,第三大的元素在第一组,以此类推。。。最后需要找到两个集合元素之和的绝对差。 我可以在不计算所有元素的情况下找到这个差异吗?因为N可以大到最大值为100。

  • 问题内容: 如何递归所有目录和子目录? 问题答案: 第一个参数表示要搜索的正则表达式,而第二个参数表示应搜索的目录。在这种情况下,表示当前目录。 注意:这适用于GNU grep,在某些平台(如Solaris)上,必须专门使用GNU grep而不是传统实现。对于Solaris,这是命令。

  • 我应该写一个递归(!)方法来计算整数数组中给定整数的出现次数,如果偶数,则返回true,如果为奇数,则返回false。这是我到目前为止的代码: 它适用于 但它给出了 for 我不确定如何防止这种无休止的递归循环,因为我是编程新手,这是我第一次使用递归。提前致谢。

  • 以下是代码: 如果我输入999999999,它会调用自己,但在第四行它不会再要求输入。调试器不能给出更多的信息,因为这是一个更具体的语言问题。提前感谢。祝您愉快!是的,目标是将输入解析为短输入。我知道从最小负值中丢失1,wip:) ==编辑=== 我试过goto...不,是一样的。所以我想这与可见变量或地址无关。 ==编辑=== 我不能用操作员

  • 我知道如何通过selenium浏览结果页面,但我不知道如何浏览结果页面。我也尝试过mechanize,但这并没有让我走得更远。这就是我现在的处境: 最终的想法是将当事人、案件编号和提交日期作为字符串存储在一个数据库中。csv。当我现在打印输出时,我得到: 感谢任何帮助。