Javascript中的简单递归问题

Javascript中的简单递归问题,javascript,recursion,Javascript,Recursion,这是代码片段,它进入了一个无限循环-带有“太多递归错误” 无法理解这里的问题是什么。我觉得我犯了一个很简单的错误 您的终止条件如下: for(根中的变量i){ 因此,为什么不使用类似以下的console.log(i)来查看它是否按照您的想法运行。这种技术通常比调试器更快。您的终止条件如下: for(根中的变量i){ 因此,为什么不使用类似以下的console.log(i)来查看它是否按照您的想法运行。这种技术通常比调试器更快。您在递归中不断引用原始树-您可能希望在递归传递的节点上拆分: getL

这是代码片段,它进入了一个无限循环-带有“太多递归错误”

无法理解这里的问题是什么。我觉得我犯了一个很简单的错误


您的终止条件如下:

for(根中的变量i){


因此,为什么不使用类似以下的
console.log(i)
来查看它是否按照您的想法运行。这种技术通常比调试器更快。

您的终止条件如下:

for(根中的变量i){


因此,为什么不使用类似以下的
console.log(i)
来查看它是否按照您的想法运行。这种技术通常比调试器更快。

您在递归中不断引用原始树-您可能希望在递归传递的节点上拆分:

getLeaves: function(roots){
for(var i in roots){
    var root = roots[i];

    if( !(root.cf)){

        this.WData.wf.leaves.push( root );
        return false;
    }
    else{
        this.getLeaves( root.cf.split(',').map(Number) );
    }
}
return false;

在递归中不断引用原始树-可能希望在递归传递的节点上拆分:

getLeaves: function(roots){
for(var i in roots){
    var root = roots[i];

    if( !(root.cf)){

        this.WData.wf.leaves.push( root );
        return false;
    }
    else{
        this.getLeaves( root.cf.split(',').map(Number) );
    }
}
return false;

您有几个问题:

  • 在循环开始时,应该使用
    而不是
    this.WData.wf.roots
    ,例如:

    var root = roots[i];
    
  • 您试图将新项推送到字符串而不是数组中,因此在结构中,将leave更改为以下内容:

    leaves : ["asdf"],
    
  • 当您尝试将其分配给results div(在jsFiddle中)时,这会导致一个错误,因此使用join创建一个字符串

    $('#result').append( SW.WData.wf.leaves.join(",") );
    

  • 您有几个问题:

  • 在循环开始时,应该使用
    而不是
    this.WData.wf.roots
    ,例如:

    var root = roots[i];
    
  • 您试图将新项推送到字符串而不是数组中,因此在结构中,将leave更改为以下内容:

    leaves : ["asdf"],
    
  • 当您尝试将其分配给results div(在jsFiddle中)时,这会导致一个错误,因此使用join创建一个字符串

    $('#result').append( SW.WData.wf.leaves.join(",") );
    

  • 据我所知,您需要更改
    features
    条目中
    cf
    属性的值,以反映您已经对它们进行了解析。如果不这样做,您的代码的这个分支

    else{
        this.getLeaves( this.WData.wf.features[root].cf.split(',').map(Number) );
    }
    
    如果我是正确的,将无限地向
    数组
    添加值

    因此,请尝试添加以下内容:

     else {
    
        var cf = this.WData.wf.features[root].cf ; // save the current cf value
    
        //... change this.WData.wf.features[root].cf to the desired value
    
            this.getLeaves( cf.split(',').map(Number) ) ;
    
    
     }
    

    顺便说一下,
    Array.map
    是一个特定于浏览器实现的功能(适用于Gecko浏览器,例如Firefox)。换句话说,如果没有实现,代码将无法工作


    此外,在我看来,您最好添加注释并折叠代码,使其更易于理解。现在的编写方式虽然简洁,但很难理解其基本目的。

    据我所知,您需要更改
    功能
    条目中
    cf
    属性的值,以反映您的需要已分析它们。如果不分析,则此代码分支

    else{
        this.getLeaves( this.WData.wf.features[root].cf.split(',').map(Number) );
    }
    
    如果我是正确的,将无限地向
    数组
    添加值

    因此,请尝试添加以下内容:

     else {
    
        var cf = this.WData.wf.features[root].cf ; // save the current cf value
    
        //... change this.WData.wf.features[root].cf to the desired value
    
            this.getLeaves( cf.split(',').map(Number) ) ;
    
    
     }
    

    顺便说一下,
    Array.map
    是一个特定于浏览器实现的功能(适用于Gecko浏览器,例如Firefox)。换句话说,如果没有实现,代码将无法工作

    此外,在我看来,最好添加注释并折叠代码,使其更易于理解。现在的编写方式虽然简洁,但很难理解其基本目的