FOR循环中的递归

时间:2015-12-17 20:18:41

标签: javascript recursion

我在for循环中使用递归:

%0d

经过3次迭代后,我得到了错误:for循环中未定义matrix [v]。如果我没有“否则如果”一切都好。如何在if else中使用递归?

编辑: 我添加了所有代码

3 个答案:

答案 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;
}

这是一个想法...