JavaScript递归,详细了解

时间:2017-02-08 13:37:09

标签: javascript recursion

我无法理解这种递归是如何起作用的。具体来说,我无法清楚地知道最后function foo(i) { if (i < 0) return; console.log('begin: ' + i); foo(i - 1); console.log('end: ' + i); } foo(3);(&#39;结束&#39; ---)是如何执行的。请提供指导。请帮我处理执行部分。我不明白它是如何形成输出的

&#13;
&#13;
npm login --registry=https://reg.example.com --scope=@myco
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:4)

此函数执行方式的说明:

让我们找出调用此方法时发生的情况并将 var input [input1,input2,input3,input4]; for (i= 0; i < input.length; i++){ if (ltr.test(input[]) &&!(regex.test(input[]))){ myinputid.style.border='1.5px solid red'; } else { alert("noarray"); } } 作为参数传递:

3

实际输出:

foo(3);
 // (3<0) false, so skip the return
 // Log out: 'begin: 3'
  //foo (2);
  // (2<0) skip return;
  // Log out: 'begin: 2'
    //foo(1);
      // (1<0) skip return;
      // Log out: 'begin: 1'
      //foo(0);
        // (0<0) false, skip return;
        // Log out: 'begin: 0'
        //foo(-1);
        //(-1 < 0) true!!! 
        //return undefined
      // Log out: 'end: 0'
      //return undefined
    //Log out: 'end: 1'
    //return undefined
  //Log out: 'end: 2'
  //return undefined
//Log out: 'end: 3'
<---return undefined

答案 1 :(得分:2)

第一次迭代:foo(3)所以i = 3,然后调用foo(2),i = 2,然后i = 1,i = 0。现在调用foo(-1)。 if条件现在为true,因此它在foo(0)调用中返回,其中console.log在i = 0时执行。然后i = 1,i = 2,i = 3。

所以你会:

begin 3
begin 2
begin 1
begin 0
end 0
end 1
end 2
end 3

答案 2 :(得分:1)

当您致电foo(3)时,我们看到的是:

begin: 3
begin: 2
begin: 1
begin: 0
end: 0
end: 1
end: 2
end: 3

代码中发生了什么:

begin: 3
//foo is called, foo(2)
//start of foo(2)
begin: 2
//foo is called, foo(1)
//start of foo(1)
begin: 1
//foo is called, foo(0)
//start of foo(0)
begin: 0
//foo is called, foo(-1)
//start of foo(-1)
//if statement condition is true, returns, ending the recursion chain
//thread returns back to the foo(0) method, logs i
end: 0
//thread returns back to the foo(1) method, logs i
end: 1
//thread returns back to the foo(2) method, logs i
end: 2
//thread returns back to the foo(3) method, logs i
end: 3