java - 展开到 Java 中递归调用的第一帧?

标签 java recursion stack-unwinding

假设我有一个(非常简单的)递归方法,如下所示:

public static void myMeth(int n)
{
     // do something

     // now execute the recursive call
     if (n < 0) return;
     else if ( n == SOME_CONST ) throw new UnsupportedOperationException();
     else myMeth(n - 1);
}

(第二个条件n == SOME_CONST只是为了表明有时会发生异常,有时不会)。

假设我调用 myMeth(10),并且在几次递归调用后确实发生了异常(例如 SOME_CONST == 5)。

我可以采取什么技巧(即使用 try-catch block )让我回到 myMeth 的第一帧吗?

最佳答案

这可行,可能有一个更干净的解决方案,但这只是一个开始:

public static void myMeth(int n, boolean firstCall)
{
     // do something

     // now execute the recursive call

     try
     {
         if (n < 0) return;
         else if ( n == SOME_CONST ) throw new UnsupportedOperationException();
         else myMeth(n - 1, false);
     }
     catch(UnsupportedOperationException e)
     {
         if (firstCall)
         {
              //logic
         }
         else
         {
              throw e;
         }
     }
}

关于java - 展开到 Java 中递归调用的第一帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21171274/

相关文章:

java - 遵循只能增加的值集合中的最小值

java - 使用 java (SHA-512) 创建与 symfony2 相同的哈希值

工作线程中的 C++ 未捕获异常

java - 长时间转换为错误的时间

java - Eclipse 似乎认为 CSS 文件是 Java 源代码

c++ - 这是递归上下文中的编译器优化吗?

python递归列表问题

javascript - 使用 Javascript 递归地进行线性搜索

c++ - 在 C++ 中通常调用退出 block 时如何销毁局部变量?