[英]Why does this function return -3?
当我尝试使用此功能时,控制台的日志为-3,但是当我自己进行计算时,它似乎会返回12。这是为什么?
function func(x) {
if (x <= 0) {
return x;
}
return func(x - 5);
}
console.log(func(17));
因为返回时您会再次调用它
function func(x) { <-- x=17
if (x <= 0) {
return x;
}
return func(x - 5); <---x=12 so now you call the func with 12
}
console.log(func(17));
第2步
function func(x) { <-- x=12
if (x <= 0) {
return x;
}
return func(x - 5); <---x=7 you call with 7
}
console.log(func(17));
第三步
function func(x) { <-- x=7
if (x <= 0) {
return x;
}
return func(x - 5); <---x=2 you call with 2
}
console.log(func(17));
第四步
function func(x) { <-- x=2
if (x <= 0) {
return x;
}
return func(x - 5); <---x=-3 you call with -3
}
console.log(func(17));
最后一步
function func(x) { <-- x=-3
if (x <= 0) {
return x; <--- now you print the result
}
return func(x - 5);
}
console.log(func(17));
编辑:
递归函数是这样的函数:它们在中断条件为true之前一直调用它们,在您的示例中,中断条件为x等于(=)或小于(<)小于0,然后打印结果。
第一个数字为17时,您会迷惑5,返回真断点条件为-3
您调用它一次,然后只要值大于0,它就会继续调用自身(在第二次返回时)。因此,它会一直进行直到值小于0,然后返回最终结果。
没错,您应该得到-3。 您的递归函数说,将x减5直到x小于或等于0。因此,第一次迭代将是12,然后是7,然后是2,最后是-3,它满足小于或等于0的条件,然后返回X
当一个方法调用自身直到满足特定条件时。在本示例中, func()
方法将继续调用自身,将x-5
作为参数传入,直到小于0,这时它将返回当前值的x
。 因此,调用栈将如下所示:
func(17)
is (17 <= 0)? No
func(17 - 5)
is(12 <= 0)? No
func(12 - 5)
is(7 <= 0)? No
func(7 - 5)
is(2 <= 0)? No
func(2 - 5)
is(-3 <= 0) Yes!
return -3
正如其他答案所说的那样,它返回-3
的原因是由于递归,而且是因为您从自身内部调用了该函数。
但是,如果您希望输出为12
,我还要添加我认为您尝试编写的代码:
function func(x) {
if (x <= 0) {
return x;
}
return x - 5;
}
console.log(func(17)); // <---12
返回x
时,无需引用func
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.