跨实例的迭代调用是否构成递归?

时间:2013-09-27 13:26:53

标签: recursion

我的问题是关于迭代遍历节点列表是否满足递归的'函数调用本身'定义。我认为'自称'字面意味着函数调用自身,而其他人则说,'本身'可能是第二个(或第三个)节点的相同功能。

并不是说我了解JavaScript,但希望这可以解决这个问题:

Class Node { 
  var value = 0;
  var kids = [];

  var list = function(){
     var rtn = value + "\n";
     if (kids.length > 0){
        for (var i=0; i<kids.length; i++){
           rtn += kids[i].list();
        }
     }
     return rtn;
   };
}

现在假设我用节点对象填充kids数组,然后调用头节点的list()函数,它将追加头节点的值,然后追加所有孩子节点的值。我的问题是,行rtn += kids[i].list();实际上是一个递归调用吗?

正如我所指出的,我会说不是因为(相同的)函数在不同的节点中运行,但其他人说是 - 它的代码完全相同。我无法使用谷歌找到明确的答案,所以我可以问一下这里的共识是什么?

1 个答案:

答案 0 :(得分:1)

这肯定是递归。假设您已经以将节点作为参数的方式编写函数,而不是作为节点的方法。在这种情况下,它会用不同的参数调用自己。如果你正确地看它,它所附加的节点只是一组不同的参数(虽然是未写的)到同一个函数。该功能仍在调用自己。

此外,递归不仅限于直接调用自身的函数。您可以编写一个函数a(),调用另一个函数b(),然后再调用a()a()只是在b()的帮助下,{{1}}仍在呼唤自己。