【问题标题】:Regarding recurssive if else block关于递归 if else 块
【发布时间】:2021-02-24 04:43:08
【问题描述】:

我正在尝试了解递归的工作原理。下面是If-else块的代码。

 public class Test {

     public void test(int count){
         if(count ==1){

        System.out.println("Inside IF");

     }

     else{
              System.out.println("Inside Else");
              test(--count);
              System.out.println("TEST");

       }
           }


      public static void main(String[] args) {

            Test t = new Test();
             t.test(5);
       }


         }

上述代码的输出是

在其他内部 在其他内部 在其他内部 在其他内部 中频内 测试 测试 测试 测试

谁能帮我理解为什么 TEST 被打印了 4 次。

谢谢

【问题讨论】:

  • 我认为某人应该是一本“书”。一个快速的帮助理解是,所有方法调用都保存在堆栈中,直到达到终止条件,即弹出发生时。
  • 阅读javamex.com/tutorials/techniques/recursion_how.shtml。这将对您有所帮助。
  • 从 5 到 1 需要 4 次递减。
  • 看看this,看看它是否有助于解释事情。

标签: java


【解决方案1】:

test(5) -> “Inside Else” -> test(4) -> “Inside Else” -> test(3) -> “Inside Else” -> test(2) -> “Inside Else” - > 测试(1) -> 内部如果"

此时,您“Inside Else”4 次。有 4 个待处理的 PrintLn("Tests") 需要处理。

“测试” “测试” “测试” “测试”

【讨论】:

    【解决方案2】:

    当您从方法 a 调用方法 b 时,方法 a(调用方法)不仅会结束,它会一直等到 b 完成,然后继续其愉快的方式。在您的情况下,您每次都调用相同的方法 - 这些方法中的每一个都等待它调用的方法完成。因此,当您调用t.test(5) 时,它会落入调用test(4) 的else 块中,因此您对t.test(5) 的原始调用正在等待test(4) 完成。但是test(4) 会调用test(3) 并等待它完成。 test(3) 调用 test(2),它正在等待。然后test(2) 调用test(1),神奇的事情发生了。

    test(1) 将落入 if 块并执行 System.out.println("Inside IF");,但没有其他要执行的,所以它会返回。 test(2) 一直在等待 test(1) 返回,它现在已经返回,因此它将继续并从它所在的位置执行下一行代码,即 System.out.println("TEST");。没有其他东西可以执行,所以它返回 - 到 test(3),它正在等待 test(2) 返回,所以另一个 System.out.println("TEST");。它返回到test(4):另一个System.out.println("TEST");,最后在main 中返回到原来的t.test(5)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多