当前位置: 首页 > 知识库问答 >
问题:

switch语句是递归的吗?

苗冯浩
2023-03-14

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

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

需要更改什么才能使case x

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


共有1个答案

何睿范
2023-03-14

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

就您而言:

return misc(x-1);

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

如果你做了这样的事情,就不会发生这种情况:

return 1 + misc(x-1);

那是因为它相当于:

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

这意味着misc()将不在尾部位置。

因此,当开关处于尾部位置时,返回是否处于if中无关紧要,只要函数处于尾部位置,就可以对尾部调用进行优化。

 类似资料:
  • 我不得不使用全局变量found来指示在哪里找到了一个和。返回语句始终未定义。 此外,如果在下面的if语句中使用return语句,代码将无法正常工作。 这不是问题的最佳解决方案,但这是我得到的工作版本。 返回语句之间的****,删除时代码工作,否则我要么得到false或未定义。我不明白这部分!为什么删除返回就能解决问题,我认为每个递归调用都必须用返回语句进行。 问题可能是由于多次呼叫造成的吗?我是不

  • switch 语句可以替代多个 if 判断。 switch 语句为多分支选择的情况提供了一个更具描述性的方式。 语法 switch 语句有至少一个 case 代码块和一个可选的 default 代码块。 就像这样: switch(x) { case 'value1': // if (x === 'value1') ... [break] case 'value2':

  •  使用 switch 语句可以更简洁地实现 if ~ else if 的结构。格式如下。 switch(base_expression) { casecondition_expression1: casecondition_expression2: : : default: : : }  写在 base_expression 位置的表达式会在刚开始时被求值。switch 后面的语句块中的 case

  • 问题内容: PostgreSQL 9.1 经营状况 每个月,都会为特定的流程分配一批新的帐户。可以按月份,帐户数和帐户总余额来描述每批。该过程的目标是从客户那里收回一些余额。然后每月分别跟踪每个批次(自将批次转移到流程以来,每个月回收的金额)。 目标 我的目标是预测将来将回收多少。 资料定义 样本数据 计算过程 您可以将数据想象成一个三角形矩阵(将预测X值): 算法 我的目标是预测所有遗漏的点(未

  • C# 中的 switch 语句有些类似于《 if else if 语句》,都可以根据表达式执行某个的语句块,其语法格式如下: switch(表达式){     case value1:     //表达式的值为 value1 时,要执行的代码         break;     case value2:     //表达式的值为 value2 时,要执行的代码         break;   

  • 当条件判断分支太多的时候,我们会使用switch语句来优化逻辑。 package main import "fmt" import "time" func main() { // 基础的switch用法 i := 2 fmt.Print("write ", i, " as ") switch i { case 1: fmt.Println("