JavaScript递归函数调用中变量的最终值
递归函数的Else部分甚至会一直运行,直到JavaScript递归函数调用中变量的最终值,javascript,recursion,Javascript,Recursion,递归函数的Else部分甚至会一直运行,直到num变为0。这很清楚,但是当console.log记录时,chrome开发者控制台显示num=1打印 最终值是0还是1 通话结束后的屏幕截图: 对于奇数,响应为假;对于偶数,响应为真。这看起来正是你需要的。但这看起来太复杂了,为什么不直接做呢 function even(num) {//console.log(num) => shows 1 & then 0 before terminating. if (
num
变为0。这很清楚,但是当console.log
记录时,chrome开发者控制台显示num=1打印
最终值是0还是1
通话结束后的屏幕截图:
对于奇数,响应为假;对于偶数,响应为真。这看起来正是你需要的。但这看起来太复杂了,为什么不直接做呢
function even(num) {//console.log(num) => shows 1 & then 0 before terminating.
if (num === 0) {
return true;
} else {
return !even(num - 1);
}
}
console.log(even(1));
//Why Chrome Console shows num = 1 when .log is being executed.
您提供的函数将递归地调用自身,直到num为0,然后结果将冒泡返回 因此:
函数偶数(num){
log(“num是函数前面的“+num+”);
如果(num==0){
返回true;
}否则{
var returnValue=!偶数(num-1);
log(“num是:“+num+”在递归之后”);
返回值;
}
}
控制台日志(偶数(5))代码>是的,当我们使用像递归这样的数据结构时,所有调用都进入堆栈,所有操作都根据堆栈推送和弹出操作进行。所以
当您将1传递给函数时,基本上发生了什么,num的值是-
堆栈中的1->0,但当您的条件为真时,堆栈将释放,因此它将返回原始状态,最后一个值为1,因此您将获得1。您的问题不清楚是什么问题以及您期望的输出。您在第二行有一个断点。继续code@JayHarris它之所以存在,是因为我正试图显示最终值num
为1,而我期望它为10@AnkitAgarwal我正在尝试确定num
的最终值,因此按play,它将再次中断。该函数将运行两次。你想第二次看到休息F8
是continue Bt这当然更好,但我想知道为什么num的最终值在控制台中显示为1而不是0说num
的最终值为1而不是0是正确的。这种行为有名称吗?按时间顺序:是的,num的最终值为1。我不确定具体的术语是什么,但这种行为是通过递归使用调用堆栈产生的。本页调用堆栈部分的图表更直观地解释了这一点:如果初始参数为2,那么最终值会是多少?是的,通过所有递归调用跟踪num将是2->1->0->1->2puttingconsole.log(num)
在函数体的开头,只记录1,然后记录0,然后返回false。我假设控制台中显示的最终值(num=1)不可访问?
function even(num) {
return n % 2 == 0;
}