说到递归,这里是我挣扎的地方,我知道函数应该为true的边缘情况,但是因为我必须添加一个返回false语句,并且在调用堆栈的某个深处,它确实变得正确(这是检查的全部要点!),我希望最终的结果是真的,并且让递归停止。但最终,它找到了返回false的方法,仅仅因为它是函数的最后一件事。
public boolean isPathHelper(Node node, String input){
if(node.accept == true){
return true;
}else{
if(input.length() == 0){
return false;
}
isPathHelper(getNextState(node, input.charAt(0) -'0'), input.substring(1));
return false;
}
我该如何处理这种情况?我知道全局变量可以提供帮助,但我希望我的知识存在差距。
答案 0 :(得分:3)
试试这个:
public boolean isPathHelper(Node node, String input, int count){
if(input.length() == 0){
return false; //I can't go any further: return "failed"
}
else if(count == input.length()){
return true; //if I ever reach here, then I am done: return "success"
}
// else call self recursively
return isPathHelper(
getNextState(node, input.charAt(0) -'0'), input.substring(1), count+1);
}
仔细检查您的逻辑和数据,以便 SURE 在某个时刻点击“count == input.length()”。最好在你用完堆栈之前的某个时刻;)