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

递归如何在调用堆栈的幕后工作?[重复]

顾池暝
2023-03-14

我理解递归的逻辑,一个函数调用一个基例的函数然后终止,我在这里有一个代码,它记录一个简单的递归,我没有得到的是它开始记录达到条件,条件满足:0?

function factorialize(num) {

    if(num === 0){
        console.log('condition met: '+num);
        return 1;
    }

    var x = factorialize(num-1); // iterate
    var toReturn = num*x;

    console.log("Current call: num = " + num
            + " x = " + x
            + "\n"
            + "Returning " + toReturn
            );

    return toReturn;

}

factorialize(5);

我希望这段代码首先记录输出,最后达到条件?

共有2个答案

锺离鸿
2023-03-14

正如已经指出的,这是

因为 factorialize(5) 调用 factorialize(4),它调用 factorialize(3),它调用 factorialize(2),它调用 factorialize(1),它调用 factorialize(0)

然后发生所有日志。

邵华皓
2023-03-14

在递归中,首先你“进去”,然后你“出来”。

递归factoriize调用之前的任何内容都在“in”的路上。

之后的任何东西都在“出去”的路上。

这是您的第二个控制台。log语句位于递归调用之后,在“out”过程中执行。

您的第一个< code>console.log语句位于< code>if语句中。< code>if语句出现在递归调用之前,因此它在“进入”途中的每一级都被测试,但它只在到达井底时才执行< code>console.log语句。

 类似资料:
  • Python/CS新手,试图了解特定递归函数如何“在引擎盖下”工作,函数的堆栈框架如何运行,它们“持有”的值是什么 我知道这里有很多关于递归函数的文章/帖子,这里有它们如何工作的示例,但递归的概念和堆栈如何工作/它们在递归函数中的作用有点棘手,我找不到任何清晰简洁的解释。 假设我们有以下递归函数来反转字符串中的字符: 其输出为:< code>olleh 我认为<code>reverse_strin

  • 我是一名大学生,学习球拍/方案和C作为我的CS学位的入门课程。 我在网上读到,在C语言中使用迭代而不是递归通常是最佳实践,因为递归由于将堆栈帧保存到调用堆栈上而代价高昂。。。 现在,在类似于Scheme的函数式语言中,递归一直在使用。我知道尾部递归在Scheme中是一个巨大的优势,据我所知,它只需要一个堆栈帧(有人能澄清这一点吗?)无论递归有多深。 我的问题是:非尾递归呢?每个函数应用程序是否保存

  • 让我们回到函数,进行更深入的研究。 我们的第一个主题是 递归(recursion)。 如果你不是刚接触编程,那么你可能已经很熟悉它了,那么你可以跳过这一章。 递归是一种编程模式,在一个任务可以自然地拆分成多个相同类型但更简单的任务的情况下非常有用。或者,在一个任务可以简化为一个简单的行为加上该任务的一个更简单的变体的时候可以使用。或者,就像我们很快会看到的那样,处理某些数据结构。 当一个函数解决一

  • 问题内容: 请以最简单的方式说明递归的工作方式。 问题答案: 这是一个递归方法的简单示例:-

  • 代码运行良好。只是我不明白。在递归部分有困难的。在此部分中:我的想法是,首先它将一直执行直到一个阈值。则它将执行一次。因此只会被赋值一次。显然那不是真的。 对我来说,困难的部分是在方法中,做什么?在方法中,、做什么?

  • 问题内容: 代码1: 如果还没有完成解释,该如何使用?我已经可以理解在其他情况下使用递归: 代码2: 但是,在代码2的情况下,最终将达到它无法满足的程度,并且该方法将停止递归调用自身。但是,在代码2的情况下,如果作为起点到2、3和5,依此类推,我看不到如何从1获得自身。另外,我看不到该行的工作方式,因为在某种意义上必须包含该行才能工作,但目前为止还不行。 我正在看的书说它会起作用。它是如何工作的?