了解递归函数在javascript中的工作原理

时间:2016-07-12 07:28:04

标签: javascript recursion

我对运行以下函数的确切执行时间线感到有点困惑。我在MDN指南上看到了这段代码:

function foo (i)  {
    if (i<0) return;
    console.log('begin' + i);
    foo(i-1);
    console.log('end' + i);
} 

根据我对功能如何运作的了解,这就是我的想法,尽管我的知识不足:

我认为当调用函数foo(3)时,它将转到函数并检查条件if i < 0,然后它将运行下一个代码console.log('begin:' + i)

之后,执行下一行代码,因为JavaScript逐行执行,下一行代码foo(i-1)将被执行。

i的当前值为3减去1,因此调用foo(2)并继续执行。

我的问题是:我的理解是否正确?。如果没有请解释这个代码在做什么,否则任何人都可以解释这个函数什么时候停止被调用?

2 个答案:

答案 0 :(得分:2)

调用foo(3)时会发生以下情况(伪代码):

execute foo(3)
    3 is greater than 0 thus log(begin 3)
    execute foo(2)
        2 is greater than 0 thus log(begin 2)
        execute foo(1)
            1 is greater than 0 thus log(begin 1)
            execute foo(0)
                0 is equal to 0 thus log(begin 0)
                execute foo(-1)
                    -1 is less than 0 thus return
                log(end 0)
            log(end 1)
        log(end 2)
    log(end 3)
return

答案 1 :(得分:1)

它的工作原理如下:

foo(3)->

if (3 < 0)
  return
console.log('begin' + 3)
if (2 < 0)
  return
console.log('begin' + 2)
if (1 < 0)
  return
console.log('begin' + 1)
if (0 < 0)
  return
console.log('begin' + 0)
if (-1 < 0)
  return
console.log('end' + 0)
console.log('end' + 1)
console.log('end' + 2)
console.log('end' + 3)