【发布时间】:2021-10-26 16:57:51
【问题描述】:
这个函数会使用尾递归吗?
function doStuff(param) {
if (someExitCondition) {
return [];
}
// maybe manipulate param somehow
return [...doStuff(param - 1), value]; // spread the recursive function's result and append 1 item.
}
如果没有,是否可以对其进行重构,使其可以使用尾递归?
我怀疑递归函数的结果大小未知这一事实阻止了尾递归在这里的可能,但我不确定。
注意在我的情况下,最大迭代可能很低,因此尾递归的影响可以忽略不计甚至可能为 0?因此,我将其归类为过早的微优化。
所以这主要是一个学术问题,我很好奇答案。
【问题讨论】:
-
我还没有设法让 JavaScript 成为尾递归。至少不在浏览器中。见,stackoverflow.com/questions/37224520/…
-
旁注:
...不是运算符。操作员不能做...所做的事情。这是主要语法。 -
我想知道生成器是否会发生尾递归?
function *doStuff(param) { if (param < 1) return; yield param; yield* doStuff(param-1); } console.dir([...doStuff(5)]);(我知道this)