递归Java返回问题
public void question(int col, int n, Node<Integer> part_soln) {
if (col==0) stack.push(part_soln);
else for (int row=1; row<=n; row++)
{ if (!exists(row,part_soln) && !unsafe(col,row,col+1,part_soln))
{ Node<Integer> new_soln = new Node<Integer>(row,part_soln);
question(col-1,n,new_soln);
}
}
}
我将part_soln插入堆栈,但是现在我想得到第一个part_soln而不是堆栈,一旦我得到part_soln,我将打破循环,我修改问题
public void question(int col, int n, Node<Integer> part_soln) {
if (col==0) return part_soln;
else for (int row=1; row<=n; row++)
{ if (!exists(row,part_soln) && !unsafe(col,row,col+1,part_soln))
{ Node<Integer> new_soln = new Node<Integer>(row,part_soln);
question(col-1,n,new_soln);
}
}
return null;
}
问题出现了,我无法得到堆栈中的第一个元素,但一直得到“null”作为答案,有什么建议吗
# 1 楼答案
在
question()
的第二个版本中,只有两个return
语句,第二个语句在col != 0
时返回null
因此,您似乎弄乱了递归方案,因为即使
question()
在循环中递归调用自身,也不会使用返回值了解该方法的作用将有所帮助。但无论如何,我试图根据您提供的信息(您希望找到并返回第一个合适的解决方案)来修复它是错误的
区别在于我存储了递归调用的返回值,如果它不是
null
,则立即返回它