让我们说你有一个方法:
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/
答案 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;
}
}