0

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

并不是说我知道 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();实际上是递归调用吗?

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

4

1 回答 1

1

这肯定是递归。假设您以这样一种方式编写函数,它将节点作为参数,而不是节点的方法。在那种情况下,它会用不同的参数调用自己。如果你没看错的话,它所附加的节点只是同一个函数的一组不同的参数(尽管是未写的参数)。该函数仍在调用自身。

此外,递归并不严格限于直接调用自身的函数。您可以编写一个a()调用另一个函数的函数b(),该函数又再次调用a()a()仍然在调用自己,只是在 的帮助下b()

于 2013-09-27T13:42:08.600 回答