【发布时间】:2020-05-01 17:00:33
【问题描述】:
所以我看到的尾递归的一个常见例子是:
function factorial(x) {
if (x <= 0) {
return 1;
} else {
return x * factorial(x-1); // (A)
}
}
它针对尾部调用进行了优化:
function factorial(n) {
return facRec(n, 1);
}
function facRec(x, acc) {
if (x <= 1) {
return acc;
} else {
return facRec(x-1, x*acc); // (A)
}
}
我明白了。但我的问题是:为什么* 在这种情况下不是可以优化的函数?
我不能将顶部重写为
function factorial(x) {
if (x <= 0) {
return 1;
} else {
return multiply(x, factorial(x-1)); // (A)
}
}
我知道这行不通。我认为这只是因为它不是真正的尾递归调用?但这仍然会进行尾部优化吗?
【问题讨论】:
-
您的示例中的
multiply是什么? -
几乎所有地方仍然不支持 TCO。
-
@Grant Everett:请更改您的标题,我很乐意“支持”您的问题。请“投票”和“接受”T.J.如果它回答了您的问题,Crowder 的最出色的回答。
-
我刚开始在这里提问。我只是将其更改为“已解决”吗?
标签: javascript recursion tail-recursion