如何在Java中处理递归关闭操作?

时间:2016-04-24 05:14:29

标签: java recursion

让我们说你有一个方法:

 Object recursiveMethod() {
     // do some things to an object. 
     Object obj = new Object();

     if (test fails) {
         recursiveMethod(); // do the function again until it fails. 
     }

     System.out.println("Returning object");
     return obj; 
 }

我注意到,如果函数失败,函数会排队,然后从堆栈中弹出。因此,如果它失败5次,它将打印出来:

Returning object //success
Returning object //failure
Returning object //failure
Returning object //failure
Returning object //failure
Returning object //failure

只有Returning object语句打印一次的最佳方法是什么?

以下是我在递归方面所做的一些研究:http://www.toves.org/books/java/ch17-recur/

1 个答案:

答案 0 :(得分:2)

您需要返回递归调用的结果。否则你正在调用它,但丢弃它的返回值,而是返回未通过测试的对象。

if (test fails) {
    return recursiveMethod();
}

请注意,虽然这可能是一个很好的学习练习,但这不是一个好主意。递归是实现重试的一种糟糕方式,因为每次重试堆栈时都会变长。如果你重试太多次,它最终会溢出。使用循环要好得多。

while (true) {
   //do some things to an object. 
   Object obj = new Object();

   if (test succeeds) {
       System.out.println("Returning object");
       return obj; 
   }
}