java - 递归输出

标签 java loops recursion methods

我刚刚接触到递归,并得到了以下代码行:

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<5 等于 false 并且它会打印 x,即 5)。但是,我不明白为什么它也打印 4 3 2 1 。感谢您的帮助

最佳答案

递归的工作原理是分解基本情况并向后构建。就你而言。您的基本情况是x>=5,在该点它将停止扩展递归树,您可以将基本情况视为树或叶子的末端。之后,它会返回完成调用 run 后要做的事情。所以在你的情况下,每次调用 1 后,它都会打印出 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)

如您所见,它转到基本案例,然后备份。

要更熟悉递归,您可以做一些问题,例如查找数组中最大的 int,方法头为 public int findLargest(int [] array, int someNumber) 您可以使用 someNumber 来表示您认为需要的任何内容。或者使用递归和一个参数来反转字符串。

关于java - 递归输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35834665/

相关文章:

java - 用java递归求解调和阶乘序列

java - 椭圆曲线 Diffie Hellman 如何结合 Java 在 JavaCard 上工作?

python - 有关创建词典的词典的更多信息

Javascript |针对对象循环遍历对象数组

list - 方案:定义一个递归谓词 u-even?获取一个列表,如果列表中的项目数为偶数,则返回#t

c - 在 C 中递归地反转多个用户输入

java - 在 Canvas View 上添加随机项目

java - 如何使用另一个字符串作为密码加密/解密一个字符串?

java - 在Java数组列表中连接字符串

Java - 可选循环