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

Javascript解释器如何执行递归函数?

卫嘉谊
2023-03-14

让我们举这个例子

function main (x) {
    return x
}

function second() {
    console.log("hello ")
}


js编译器知道所有的函数声明,所以我可以在< code > main < code > main(second())内部调用< code>second。我不明白递归函数是如何在函数声明内部调用同一个函数的


function factorial(n) {
 if (n ===1) {
 return 1;
 } else {
 return n * factorial(n-1);
 }
}

我的思考过程是:好吧,这是函数声明,这是函数所做的,但是如何
即使声明没有完成,我也可以调用相同的函数

共有1个答案

伍玮
2023-03-14

因为函数在定义时不会运行。它只在以后调用时运行。

一个函数的代码是执行计算的诀窍。如果在某个时候调用了另一个函数,这意味着执行会根据这个方法继续,然后当这个过程结束时,执行会返回到调用点之后,并从那里重新开始。

但是,是否调用相同的函数并不重要。这只是意味着将遵循相同的食谱。但是,至关重要的是,每个调用都是配方的独立副本,每个调用都在自己的环境中独立运行,例如调用堆栈帧等,这使得递归成为可能。

再看看我的回答,再多谈一谈,或者那个。

 类似资料:
  • 在我的progress函数中,它将到达递归的底部,但是我期望返回的值没有改变。 这应该返回true,它符合条件(记录文本),但随后继续移动,并且始终返回false。

  • 我正在尝试使用JavaDOM解析器为XML文档中的许多标记建立索引,以从中形成类似MIB的结构(例如 我希望将模块映射到1,将容器映射到1.1,将列表映射到1.1.1,将叶映射到1.1.1.1,将另一个叶映射到1.1.1.2(我已经有了这样做的方法),但在嵌套相同命名的XML标记时,我遇到了问题。以下是我创建的函数——为了简单起见,只需打印属性名 下面是我试图解析的XML示例: 当我在这个程序上运

  • 问题内容: 我可以在变量中创建一个递归函数,如下所示: 这样,将输出 。假设我做了以下事情: 将输出 如上。如果我再更改如下: 然后将给出,如预期的那样。 现在给出 它所指的,而不是函数(它本身指向的)。在某些情况下这可能是理想的,但是有没有一种方法可以编写函数以便它调用自身而不是保存它的变量? 也就是说,是否可以 仅 更改线路,以便 在调用时仍能完成所有这些步骤?我试过了,但这给了我错误。 问题

  • 问题内容: 请分步说明递归; 问题答案: 如果您使用的是IDE,则可以使用调试器,亲眼看看发生了什么。 无论如何,让我们尝试一下,当调用递归方法时会发生什么:您使用8()调用该方法: -> 8 ->以8/2 = 4再次调用方法 -> 4 >以4/2 = 2再次调用方法 -> 2 >用2/2 = 1再次调用方法 ->继续上一个通话,() >用2/2 = 1再次调用方法 ->继续上一个通话,() 方法

  • 我实现了一个非常简单的递归方法,将两个数相乘在一起。我很难理解递归的基本知识。 有没有人能向我解释(如果可能的话,逐行解释)这段代码是如何工作的?我尤其感到困惑的是,基大小写被写为返回0,而实际上返回的是实际的乘法。 谢谢你的帮助

  • 这个递归编码是错误的还是仅仅是那个控制台。即使执行递归,log()也不总是被执行? 在控制台中执行testrecursion不会返回任何错误。 信息控制台日志显示 再次执行测试递归会在信息控制台日志中显示这一点。 第三次执行testrecursion会在信息控制台日志中显示这一点。 在对此进行了数十次测试后,递归步骤似乎偶尔被调用。输出似乎是随机的。预期输出为 这是否看起来像递归正确发生,只是控制