gpt4 book ai didi

javascript - 这是尾声吗? (JavaScript)

转载 作者:数据小太阳 更新时间:2023-10-29 05:33:07 27 4
gpt4 key购买 nike

假设您有一个递归函数,例如:

Blah.prototype.add = function(n) {
this.total += n;
this.children.forEach(function(child) {
child.add(n);
});
};

child.add() 是尾调用吗?如果不可以这样写吗?

最佳答案

没错,就是尾调用:

function(child) {
child.add(n);
// ^ tail
}

然而这里没有任何东西是尾递归的,因为它不是直接的递归调用。

此外,this.children.forEach(…)add 方法中的尾部调用。

但是,在 native forEach 方法中调用回调可能不是尾调用优化的(除了最后一个之外,其他都不是)。你可以通过重写你的函数来强制它

Blah.prototype.add = function(n) {
"use strict";
this.total += n;
let l = this.children.length;
if (!l--)
return;
for (let i=0; i<l; i++)
this.children[i].add(n);
this.children[i].add(n); // tail-recursion
};

请注意,如果您不返回它们的结果,这些尾调用都不会被优化。

关于javascript - 这是尾声吗? (JavaScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30742985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com