我一直在尝试3个小时,我无法理解这里发生了什么。在Java枚举中递归?
我有一个枚举“迷宫”。出于某种原因,当在这个枚举上调用搜索方法时,它非常慢(运行3分钟)。但是,如果我将相同的方法作为静态方法复制到另一个类中,并且我从枚举'迷宫'中调用它,它将在一秒钟内运行!
我不明白为什么? Java枚举中的递归方法有什么问题吗?我究竟做错了什么?
public enum Maze
{
A("A.txt"), B("B.txt");
// variables here...
Maze(String fileName)
{
loadMap(fileName);
nodeDistances = new int[nodes.size()][nodes.size()];
setNeighbors();
setDistances();
}
... more methods here ...
private void setDistances()
{
nodeDistances = new int[nodes.size()][nodes.size()];
for (int i = 0; i < nodes.size(); i++) {
setMax(nodeDistances[i]);
// This works!!!
TestMaze.search(nodes, nodeDistances[i], i, 0);
// This DOESN'T WORK
//search(nodes, nodeDistances[i], i, 0);
}
}
public void setMax(int[] a) {
for (int i=0; i<a.length; i++) {
a[i] = Integer.MAX_VALUE;
}
}
public void search(List<Node> allNodes, int[] distances, int curNodeIndex, int curDist)
{
if (curDist < distances[curNodeIndex])
{
distances[curNodeIndex] = curDist;
for (Node n : allNodes.get(curNodeIndex).getNeighbors()) {
search(allNodes, distances, n.getNodeIndex(), curDist + 1);
}
}
}
}
public class TestMaze
{
public static void search(List<Node> allNodes, int[] distances, int curNodeIndex, int curDist)
{
if (curDist < distances[curNodeIndex])
{
distances[curNodeIndex] = curDist;
for (Node n : allNodes.get(curNodeIndex).getNeighbors()) {
search(allNodes, distances, n.getNodeIndex(), curDist + 1);
}
}
}
}
尝试添加一些disgnostic输出看到获得通过的递归调用什么参数,并且其中大部分时间都花在... – 2010-03-18 00:00:43
是问题仍然存在,即使我让静态的:S * – 2010-03-18 00:10:27
*为什么你使用枚举而不是类? – 2010-03-18 00:20:45