Я разработал функцию, которая рекурсивно называет себя. Но оператор return не делает того, что я хочу, чтобы он делал. Мы проверили с печатью, что возвращение достигнуто, но оно не возвращается к исходной функции. В заявлении он входит:Возвращаемое значение в рекурсивной функции JAVA
if(depth==0 && pb.isGoalState()){
System.out.println("!!!!!WOOOOOW!!!!!");
return pb;
}
Println показывает вверх отлично, но когда рь возвращается все становится странно.
Когда он возвращается к функции:
result = DLS(pb,depth); //never returns here!!!
System.out.println("Here: "+result.toString());
он никогда не печатает печать чуть выше. Я не понимаю, что случилось! Я проверил другие методы, которые я разработал сам.
private puzzleBoard IDS(String initial){
puzzleBoard pb = new puzzleBoard(initial,0,new Vector<Integer>(),new Vector<puzzleBoard>(),new Vector<puzzleBoard>());
int depth=0;
puzzleBoard result=new puzzleBoard("999999999",0,new Vector<Integer>(),new Vector<puzzleBoard>(),new Vector<puzzleBoard>());
while(true){//Repeat
System.out.println("DP "+depth);
result = DLS(pb,depth);
System.out.println("Here: "+result.toString());
if(result.isGoalState())
return result;
depth++;
}
}
private puzzleBoard DLS(puzzleBoard pb, int depth){
System.out.println("AVskilj depth "+depth+" "+(depth==0 && pb.isGoalState()));
pb.printPuzzle();
if(depth==0 && pb.isGoalState()){
System.out.println("!!!!!WOOOOOW!!!!!");
return pb;
}
else if(depth>0){
for(Iterator<puzzleBoard> child = generateSuccessorsIDS(pb).iterator(); child.hasNext();){
puzzleBoard tmp;
tmp=child.next();
tmp.printPuzzle();
DLS(tmp,(depth-1));
}
}
else
return new puzzleBoard("999999999",0,new Vector<Integer>(),new Vector<puzzleBoard>(),new Vector<puzzleBoard>());
return pb;
}
Так что моя проблема в настоящее время до сих пор в этой части кода
for(Iterator<puzzleBoard> child = generateSuccessorsIDS(pb).iterator(); child.hasNext();){
DLS(child.next(),(depth-1));
}
Когда я не использую возвращение перед DLS (child.next(), (глубина-1)); он проходит через каждого ребенка по назначению, но не сохраняет значение из-за отсутствия возврата. Когда я использую return before, он просто проходит через первого дочернего элемента в итераторе и игнорирует остальное, потому что операторы return заканчиваются для циклов.
Как это решить? Я тоже не могу думать о другом.
Вы должны также Google для собраний Java кодирования. –