我在for循环中使用递归:
%0d
经过3次迭代后,我得到了错误:for循环中未定义matrix [v]。如果我没有“否则如果”一切都好。如何在if else中使用递归?
编辑: 我添加了所有代码
答案 0 :(得分:0)
改变这个:
startVertex = 1;
到此:
startVertex = 0;
我认为你是从位置1的数组开始,但实际上是从0开始的4深。从1开始,你比数组的长度更快地到达数组的末尾。
看看是否有效
答案 1 :(得分:0)
问题或其中之一是这句话return findHamilton(vertices[vertices.length - 1]);
findHamilton正在等待int参数,但vertices[vertices.length - 1]
可能是undefined
所以我不知道这会返回你等待的值,但试试这个:
var matrix = [
[0, 1, 1, 0, 0],
[1, 0, 1, 1, 1],
[1, 1, 0, 1, 0],
[0, 1, 1, 0, 1],
[0, 1, 0, 1, 0]
];
var startVertex = 1;
var vertices = [];
var lastTakenOff = -1;
var findHamilton = function (v) {
for (var i = 0; i < matrix[v].length; i++) {
if (matrix[v][i] === 1 && vertices.indexOf(i) === -1 && i > lastTakenOff &&
vertices.length < matrix[v].length) {
vertices.push(i);
console.log(vertices)
lastTakenOff = -1;
return findHamilton(i);
} else if (vertices[vertices.length - 1] && v < matrix.length && vertices.length < matrix[v].length) {
console.log(vertices);
lastTakenOff = vertices.pop();
return findHamilton(vertices[vertices.length - 1]);
}
}
};
vertices.push(startVertex);
findHamilton(startVertex);
console.log(vertices)
我刚编辑了else if
谓词
答案 2 :(得分:-1)
你从顶点保留.pop(),我无法看到你是否检查它的长度是否达到0。
如果您尝试检索-1索引,Matrix和Vertex将全部崩溃。
会检查更多,但这是我对你的代码的第一个怀疑。
添加1:
我注意到你是嵌套函数,但是你永远不会返回任何不同于另一个函数的东西,因此你将继续嵌套直到你可能返回一些你不知道的东西,或者堆栈会溢出。所以很糟糕。
添加2:
为了执行测试,我可以看到许多不同的解决方案,而不需要嵌套。
if ( matrix.length > 0 && matrix.length == matrix[0].length)
{
for(var i = 0; i < matrix.length; i++)
for(var j = 0; j < i; j++)
If (matrix[i][j] != matrix[j][i])
return false;
return true;
}
这是一个想法...