首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归范围CountDown Javascript

递归范围CountDown Javascript
EN

Stack Overflow用户
提问于 2020-12-30 11:28:51
回答 2查看 48关注 0票数 1
代码语言:javascript
复制
var printRangeUpDown = function(min, max) {
    if (min === max) {
        console.log('condition met ' + min);
        return
    }
    console.log('low to high ' + min);
    printRangeUpDown(min + 1, max);
    console.log('high to low ' + min);
};

printRangeUpDown(4, 10);

日志4,5,6,7,8,9,10,9,8,7,6,5,4

谁能解释一下为什么printRangeUpDown下面的console.log会让它开始向后记录?我知道low将控制台日志4,5,6,7,8,9,10(基本情况) ...但我不明白为什么控制台日志记录下面的递归使它打印9,8,7,6,5,4回分钟

EN

回答 2

Stack Overflow用户

发布于 2020-12-30 12:13:05

想象一下你的递归调用堆栈(调用堆栈)。子函数必须完成,父函数才能继续。

因此,在达到基本情况(即最小==最大值)时,每个递归调用的前半部分都已执行,并且每个递归调用都等待其子调用返回。

基本情况不会递归,它只是返回。现在执行每个函数的后半部分。从最近调用的(min = 9)开始,到第一个被调用的(min = 4)。这称为后进先出或后进先出。

打印这些值的原因是,对于每个函数调用,输入参数都会被保留,直到它返回,所以您看到的是在返回到函数的第一次调用时,在执行基本情况时打印的相同值。

如果我们为每个递归调用添加一个空格,那么就很容易看到第一个和最后一个、第二个和倒数第二个调用如何匹配它们的值。

代码语言:javascript
复制
4,        // first invocation
 5,       // second
  6,      // third
   7,     // fourth
    8,    // fifth
     9,   // sixth
      10, (base case)
     9,   // sixth
    8,    // fifth
   7,     // fourth
  6,      // third
 5,       // second
4         // first invocation
票数 2
EN

Stack Overflow用户

发布于 2020-12-30 12:03:43

因为它是一个堆栈(先进先出)。

当您从一开始调用printRangeUpDown(4, 10)时,它将转到printRangeUpDown(min + 1, max);,程序将等待此函数返回go并转到printRangeUpDown(5, 10),如上所述,等待printRangeUpDown(6, 10);.

  • Program转到printRangeUpDown(10, 10),最后,第一个返回。由于<代码>D14是returned.

  • Finally,<代码>D17将返回,因此printRangeUpDown(9, 10)将返回,因为<代码>D18是D21返回。<代码>H222<代码>G223
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65501644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档