运行以下脚本时,函数末尾的返回值为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结尾?
答案 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 - 2
为3
,因此testFunction(5)
会返回3
。