我的问题是关于迭代遍历节点列表是否满足递归的'函数调用本身'定义。我认为'自称'字面意味着函数调用自身,而其他人则说,'本身'可能是第二个(或第三个)节点的相同功能。
并不是说我了解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();
实际上是一个递归调用吗?
正如我所指出的,我会说不是因为(相同的)函数在不同的节点中运行,但其他人说是 - 它的代码完全相同。我无法使用谷歌找到明确的答案,所以我可以问一下这里的共识是什么?
答案 0 :(得分:1)
这肯定是递归。假设您已经以将节点作为参数的方式编写函数,而不是作为节点的方法。在这种情况下,它会用不同的参数调用自己。如果你正确地看它,它所附加的节点只是一组不同的参数(虽然是未写的)到同一个函数。该功能仍在调用自己。
此外,递归不仅限于直接调用自身的函数。您可以编写一个函数a()
,调用另一个函数b()
,然后再调用a()
。 a()
只是在b()
的帮助下,{{1}}仍在呼唤自己。