Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 泛型树的递归循环_Javascript_Recursion_Depth First Search - Fatal编程技术网

Javascript 泛型树的递归循环

Javascript 泛型树的递归循环,javascript,recursion,depth-first-search,Javascript,Recursion,Depth First Search,几天来,我一直在努力解决以下问题。假设递归函数在基本上是树表示的字典中进行迭代 输入如下所示: var connections = {1:[2, 3, 4], 2:[5, 6, 7], 3:[8], 4:[9, 10]} 它所代表的对应树如下所示: var connections = {1:[2, 3, 4], 2:[5, 6, 7], 3:[8], 4:[9, 10]} 中间目标是以depht first搜索方式打印数字,即: 我对这个问题的解决方案是: function dfs(co

几天来,我一直在努力解决以下问题。假设递归函数在基本上是树表示的字典中进行迭代

输入如下所示:

var connections = {1:[2, 3, 4], 2:[5, 6, 7], 3:[8], 4:[9, 10]}
它所代表的对应树如下所示:

var connections = {1:[2, 3, 4], 2:[5, 6, 7], 3:[8], 4:[9, 10]}

中间目标是以depht first搜索方式打印数字,即:

我对这个问题的解决方案是:

function dfs(connections, parent) {
    console.log(parent);
    if (!(parent in connections)) {
      return;
    }

    for (i = 0; i < connections[parent].length; i++) {
      dfs(connections, connections[parent][i]);
    }
    return;
}
导致以下结果:

1
2
5
6
7
这意味着它不会返回到上一个函数并继续for循环。如果你有任何想法,我将非常感激


Cheers

您的
i
是隐式全局的,因此在它迭代
2
(长度为3)之后,
i
是4,因此对
i<连接[parent].length的进一步测试将失败

您可以使用
let
来修复它(
for(let i=0
),但是使用
forEach
可能会更好:数组方法比
for
循环更详细、更不容易出错、更实用:

var连接={
1: [2, 3, 4],
2: [5, 6, 7],
3: [8],
4: [9, 10]
}
函数dfs(连接、父级){
console.log(父级);
if(!(连接中的父节点)){
返回;
}
连接[parent].forEach(prop=>dfs(连接,prop));
}

dfs(connections,1)
您需要从在循环中声明变量的属性开始:
for(让i=0;i
否则,您将声明一个全局,它将在递归上受到攻击。请关闭此问题,因为
i
是全局使用的。感谢您编辑@NinaScholz帖子。发布后,我正在寻找如何在文本中显示图像。非常感谢您的解释和修复!这有助于我在Js中提高。