switch语句是否递归递归?

时间:2016-10-18 03:07:11

标签: javascript functional-programming tail-recursion

我一次又一次地使用switch语句。我经常发现自己想在函数中使用return语句。我想知道以这种方式编写的switch语句是否仍然是尾调优化的。

function misc(x) {
    switch(true){
        case x > 1:
            return misc(x-1);
            break;
        default:
            return;
    }
}

需要更改哪些内容才能优化case x > 1尾调用。可以使用switch语句,还是必须使用if语句之类的其他内容?

注意:我知道在大多数主流浏览器中,JavaScript都不支持尾调用优化。我大多只是想知道上述代码是否与尾调用优化兼容,无论当前浏览器是否支持它。

1 个答案:

答案 0 :(得分:3)

ES6中尾部调用优化的要求仅取决于函数调用处于尾部位置的天气 - 也就是说,函数是返回之前执行的最后一件事。

在你的情况下:

return misc(x-1);

misc()置于尾部位置。因此它可以进行尾调用优化。

如果您不这样做,那就不会发生:

return 1 + misc(x-1);

那是因为它等同于:

var tmp = misc(x-1);
tmp = 1 + tmp;
return tmp;

这意味着misc()不会处于尾部位置。

因此return位于ifwhileswitch中无关紧要,只要该函数位于尾部位置即可尾调优化。