返回变量和函数(递归)

时间:2018-04-08 23:00:21

标签: javascript recursion

运行以下脚本时,函数末尾的返回值为3.

function testFunction(num) {
  
  console.log(num);
  
  if (num == 0) {
    return num;
  }
  
  return num - testFunction(num - 1);
}

console.log("Final result is: " + testFunction(5));

如果从

切换了return语句
return num - testFunction(num - 1);

return num + testfunction(num - 1);

结尾的返回值是15(5 + 4 + 3 + 2 + 1 + 0)。

原始的return语句如何以3结尾?

3 个答案:

答案 0 :(得分:1)

调试的一种方法(在这种情况下,要了解正在发生的事情)是打印递归的每一步;



function testFunction(num) {
  if (num == 0) {
    return num;
  }
  
  const nextResult = testFunction(num - 1)
  console.log(`f(${num}) = ${num} - ${nextResult} = ${num - nextResult}`)
  return num - nextResult;
}

console.log("Final result is: " + testFunction(5));




答案 1 :(得分:1)

让我们在return num - testFunction(num - 1);

时追踪递归
tf(5) = 5 - tf(4)  
tf(4) = 4 - tf(3)  
tf(3) = 3 - tf(2)  
tf(2) = 2 - tf(1)  
tf(1) = 1 - tf(0)  
tf(0) = 0 **Base Case**

现在,一旦我们达到tf(0)= 0的基本情况,让我们展开递归:

tf(0) = 0  
tf(1) = 1 - 0 = 1  
tf(2) = 2 - 1 = 1  
tf(3) = 3 - 1 = 2  
tf(4) = 4 - 2 = 2  
tf(5) = 5 - 2 = 3

因此,该函数最终返回3

答案 2 :(得分:0)

由于testFunction(5)返回5 - testFunction(4)testFunction(4)会返回2

5 - 23,因此testFunction(5)会返回3