【问题标题】:Java recursion sum of odd even奇偶的Java递归和
【发布时间】:2016-01-15 00:51:43
【问题描述】:

我要写一个java代码(不是功课)

我们采用一个方法 int n 并返回:

如果 (n 正数和奇数)--> 1+3+5+...+n

If (n 正偶数) --> 2+4+6+..+n

如果(n 为负数或零)--> 返回 0

我知道如何分别做这三个,但是一起做呢?

例如 If (n 正偶数) --> 2+4+6+..+n

public int addeven(int n)
 {
  if(n<0)
  {
    return 0;    
  }
  if(n%2 != 0 && n>0 )
  {
    return (n+addeven(n-1));
  }

}

还有这里的 return (n+addeven(n-1)) 到底是什么意思?

【问题讨论】:

  • 如果不是作业,什么样的应用需要这个功能? :-D
  • 无。我正在自学 Java,这是书中解决的一个示例,但我正在尝试自己做这件事,因为我一直遇到递归问题。
  • 这不应该编译。具有非 void 返回类型的方法必须在每个可能的执行路径上都有一个 return 语句。你的方法不满足那个条件。

标签: java recursion


【解决方案1】:

在这两种情况下,您都需要n + (n-2) + (n-4) ...,所以这应该可以工作:

public int addStrange(int n) {
    if (n <= 0) {
        return 0;
    }
    return n + addStrange(n - 2);
}

【讨论】:

  • addStrange(n-2) 是什么意思?
  • 表示addStrange的值,参数n-2。这就是递归的意思。把它想象成f(x) = x + f(x-2)
  • 我的意思是参数(n-2)。是的,我学习了方法调用。
  • @KamiH - (n - 2) 获取n 的当前值,从中减去2 并将该值作为参数传递给调用。
  • 并且该代码可以压缩为return (n &lt;= 0 ? 0 : n + addStrange(n - 2));
【解决方案2】:

还有这里的 return (n+addeven(n-1)) 到底是什么意思?

外括号是不必要的,所以它是真的

return n+addeven(n-1);

这意味着向调用者返回 n 的总和以及以 n - 1 调用 addeven 的结果。对 addeven 的调用是函数的递归部分。您正在调用您当前使用的相同方法,但使用不同的参数。 Java(以及所有非古老语言)将允许这样做。它跟踪“堆栈”上的每个未完成的调用。重要的是,您的递归函数最终会返回而不调用自身,否则您有 无限递归 并将获得 堆栈溢出

【讨论】:

    【解决方案3】:

    为什么要使用递归?例如,如果 n 为偶数,则答案为 (n+2)*n/4

    【讨论】:

    • 因为它是递归中的自分配练习(根据评论)。
    • 啊 - 我只看过他的原始帖子,没有提到尝试递归。
    • 嗯,标题有点。 ;-)
    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多