Javascript 递归树没有给出正确的输出

Javascript 递归树没有给出正确的输出,javascript,recursion,data-structures,tree,Javascript,Recursion,Data Structures,Tree,我有一个树对象,它有两个子树(子树)5和6。5有另一个孩子7,6有另一个孩子8。我想知道树中是否包含任何特定的子树。例如,我编写了一个函数,如果树中存在子树8,则该函数将返回 var tree = { value: undefined, children: [{ value: 5, children: [{ value: 7, children: [] }] }, { value: 6, children: [{

我有一个树对象,它有两个子树(子树)5和6。5有另一个孩子7,6有另一个孩子8。我想知道树中是否包含任何特定的子树。例如,我编写了一个函数,如果树中存在子树8,则该函数将返回

var tree = {
  value: undefined,
  children: [{
    value: 5,
    children: [{
      value: 7,
      children: []
    }]
  }, {
    value: 6,
    children: [{
      value: 8,
      children: []
    }]
  }]
};
我的递归函数:

  var contains = function (node, target) {
    
    for (var i = 0; i < node.children.length; i++) {
      if (node.children[i].value === target) {
        return true;
      } else {
        return contains(node.children[i], target);
      }
      return false;

    }
  };
contains(tree, 8);

var contains=函数(节点、目标){
对于(var i=0;i

正如我们所看到的,树中存在8,但是我的函数返回false。如果我想检查是否存在5或7,我的函数将返回true,但如果我调用它来搜索6或8,它将返回undefined。我尝试使用调试器,它显示我的代码没有增加for循环以检查5之后的下一个子循环。任何帮助都将不胜感激。提前感谢。

我已经将您的一些代码进行了转换,这样它就不会过早返回

var树={
值:未定义,
儿童:[{
数值:5,
儿童:[{
数值:7,
儿童:[]
}]
}, {
价值:6,
儿童:[{
数值:8,
儿童:[]
}]
}]
};
var contains=函数(节点、目标){
对于(var i=0;ilog(包含(树,8))
您的
返回false
可能在
for
循环之外
返回false
从未执行,但要点是正确的:您总是在循环的第一次迭代中返回,因此没有太多迭代发生。@TKoL我将返回false移到for a循环之外。但在6或8个月内仍然没有显示出正确的情况。现在它运行良好。非常感谢你。我还在学习,你介意分享一下你为什么这么想吗?我的方法有什么问题?在处理此类问题时,我应该遵循什么样的思维方式?返回后,你不需要其他…@Ashequalhaque递归函数仍然有点难以解释,有时甚至难以思考,我没有任何快速的语言。在我对你最初的问题的评论中,我只是在脑海中浏览了一遍,这就是我如何注意到
返回false
发生得太快的原因——我立即注意到,在你处理数组中的第二项之前,所有路径都返回了,这正是
8
所在的位置@AshequlHaque这是一个重要的方面,你必须在一般情况下精通,而不仅仅是递归函数:学习如何在头脑中运行程序。知道在各种情况下,在每行代码之后处理哪行代码。成为计算机。@TKoL再次感谢您。