【问题标题】:Recursion output递归输出
【发布时间】:2016-06-20 11:13:19
【问题描述】:

我刚刚被介绍到递归,我得到了以下代码行:

public class RecursionThree
{
   public void run(int x )
   {
      if(x<5)
         run(x+1);
      out.println(x);
   }
   public static void main(String args[]  )
   {
      RecursionThree test = new RecursionThree ();
      test.run(1);
   }
}

并且输出应该是:5 4 3 2 1。我明白为什么它会打印 5(因为 5

【问题讨论】:

  • 你的输出应该是1 2 3 4 5,每一个都换行。递归作为一个概念可以看作是有一个带有分离(实时)屏幕的相机,其镜头指向其屏幕,这反过来又显示屏幕及其图像在原始图像的屏幕内无休止地重复,除了每次更小.就像你的情况一样。您的方法run() 一次又一次地调用run(),每次都给它一个更大的 数字,直到满足条件(在这种情况下,直到数字为5)。
  • 输出是 5 4 3 2 1,每个都换行(我运行了代码)但我想我现在明白了,谢谢
  • @shrmn 输出永远不能是1 2 3 4 5。打印是在递归阶段之后完成的,而不是之前。这将与您所说的完全相反,即5 4 3 2 1。请在发布前检查。
  • 我的错,我将out.println(x); 解释为方法中发生的第一件事(条件之前)。干杯!
  • 我现在明白了!谢谢

标签: java loops recursion methods


【解决方案1】:

对于您的x=4 案例,调用了run(5)。完成运行后,控制权返回给被调用函数,其中 x 当前为 4。因此,它执行 if 之后的行,打印 4。

x = 3, 2, 1 遵循相同的逻辑。

【讨论】:

  • 如果它说“system.out.println(x)”并且x是5,它不会打印5然后停止,因为“运行”中没有别的东西吗?我仍然不明白为什么它会一直回到过去,我到处寻找,但我无法得到明确的解释。它是否打印“4、3、2、1”,因为这些是 x 的先前值并且以某种方式递归存储这些值?希望你能帮助我,感谢你的帮助
  • @JavaB 差不多。如果你注意到,run(x+1) 被称为 iff x&lt;5。因此,对于 x = 5 的情况,不会调用 run(6)。所以,我们不必担心这一点。对于 x=5 的情况,在检查 if 条件后,打印 5。现在,我们完成了 x=5 情况的函数实例。是时候回到 x=4 的情况了。 if 案例已被评估。之后的行要求将 4 打印到控制台。现在,我们完成了 x=4 情况的函数实例。现在 x=3 的情况.....
  • @JavaB 这能回答你的问题吗?
  • @JavaB 我们从未完成执行所有其他 run 调用——它们必须在右花括号之前完成(返回/抛出)。
【解决方案2】:

递归的工作原理是分解到基本情况并向后构建。在你的情况下。您的基本情况是x&gt;=5,在该点它将停止扩展递归树,您可以将基本情况视为树的末端或叶子。之后,它会继续完成在调用 run 后要完成的事情。所以在你的情况下,每次调用一个后,它都会打印出 x。

x=1时,调用run(2)run(2)解析完毕后,进入下一行。在 run(2) 之后,打印输出是 5 4 3 2,之后它会打印出 x 回到原来的 run(1) 调用,即 1。这对于遍历树等以及许多其他问题非常有用。

当你调用 run(1) 时,图片

run(1)
 1<5
  run(2)
   2<5
    run(3)
     3<5
      run(4)
       4<5
        run(5)
          print(5)
       print(4)
     print(3)
   print(2)
 print(1)

如您所见,它转到基本情况,然后备份。

为了更加熟悉递归,您可以解决以下问题:在方法头为 public int findLargest(int [] array, int someNumber) 的数组中查找最大的 int,您可以在其中使用 someNumber 来满足您的需要。或者使用递归和一个参数来反转字符串。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 2021-02-28
相关资源
最近更新 更多