【问题标题】:Recursion to print number by using return statement使用return语句递归打印数字
【发布时间】:2019-05-30 07:13:12
【问题描述】:

我使用递归来打印数字,直到 2(数字),我将零(0)作为输入传递并递归调用它,直到数字达到 2。 我试过这段代码,它显示了正确的输出。

class Test{
    public static void main(String[] args) {
        rec(0);
    }
    private static void rec(int num){
        if(num<=2){
            rec(++num);
        }
        System.out.println(num);
    }
}

但我想通过以下方式做到这一点。

class Test{
    public static void main(String[] args) {
        rec(0);
    }
    private static void rec(int num){
        if(num==2){
            return;
        }
        rec(++num);
        System.out.println(num);
    }
}

预期输出:

2,1,0

但它显示:

2,1

为什么会这样?

【问题讨论】:

  • 在寻求免费帮助时,至少要花时间正确格式化和缩进您的代码。
  • 请修正缩进问题。
  • 对不起,我是 stackoverflow 的新手
  • 请告诉我如何缩进代码?以便下次上传。
  • @Coder1 "..how indent the code?" 有很多网站可以在线“美化/美化/格式化/缩进”您的代码,但通常我们让我们的IDE 为我们做这件事。每个像样的编辑器都应该有 Eclipse、NetBeans、IntelliJ 这样的工具。如果你的编辑器没有这样的工具,但它支持插件,通常有人为此编写插件,搜索它。

标签: java recursion


【解决方案1】:

++num 递增 num,这(如这里)使代码更难理解。

请尝试致电rec(num + 1);

您可能会发现您的终止条件需要修改为:

if (num > 2)

终止条件通常是“什么都不做”的情况,这里就是这种情况。

【讨论】:

    【解决方案2】:

    当您调用rec(++num); 时,您将在打印之前递增num。因此,当您使用0 作为输入时,在它打印时num 将更改为1。当num = 2rec() 开头时,打印不执行。

    rec(0) 打印 rec(1),1

    rec(1) 打印 rec(2),2

    rec(2) 不打印任何内容

    总输出:2,1

    【讨论】:

    • 感谢您的回答,但为什么它不打印零(0)
    • @Coder1 "但为什么它不打印零(0)" 因为当numrec(++num) 之后保持0 时,它变成1,这就是System.out.println(num); 在打印之后的结果。不要使用rec(++num),而是使用rec(num+1) 传递递增的,而不修改num 变量。
    • 已编辑答案以显示其输出方式。请记住++numnum = num + 1; 相同
    • 修改为 num+1 后得到 2,1
    • 你使用的是rec(num + 1)而不是System.out.println(num + 1)
    【解决方案3】:

    这是因为 ++num 不仅返回 num + 1 它还修改了 num 就像 num = num + 1 一样。

    你的 if 语句也是倒过来的。

    public class Test {
    
      public static void main(String[] args) {
        rec(0);
      }
    
      private static void rec(int num) {
        if (num < 2) {
          rec(num + 1);
        }
        System.out.println(num);
      }
    

    【讨论】:

      【解决方案4】:
      class Test {
      
          public static void main(String[] args) {
              rec(0);
          }
      
          private static void rec(int num){
              if(num <= 2){
                  rec(num + 1);
              } else return;
      
              System.out.println(num);
          }
      
      }
      

      ++num - 前缀递增,表示在调用System.out.println(num); 之前递增。因此,首先,您检查递归调用的情况。如果条件为假 - 退出递归。并且在打印值时。

      当您使用递归时,请尝试分散嵌套的代码块,这样您会更容易理解。

      【讨论】:

      • else return; 可以在 if(..) 中移动 System.out.println(num); 被删除。
      • ..或者如果您将&lt;= 2 更改为&lt; 2,您甚至不会将其留在if 之外。
      • 预期输出为:2,1,0
      • 感谢回复
      猜你喜欢
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2017-12-20
      相关资源
      最近更新 更多