下面的代码返回39,我不明白该逻辑如何到达它到达的位置39。我一直得到36或43。有人可以逐步列出该程序的运行方式吗?
a(1);
function a(foo) {
if(foo> 20) return foo;
return b(foo+2);
}
function b(foo) {
return c(foo) + 1;
}
function c(foo) {
return a(foo*2);
}
答案 0 :(得分:1)
您提到在尝试时,您得到了36
,所以我猜您只是忘记了必须回溯调用堆栈并从{{1 }}函数。由于此递归链最终调用了+ 1
三次,因此您的结果是c
。
但是,我们可以逐步进行。我在这里所做的所有工作都列在每个电话中。我们继续沿着链条前进,直到其中一个函数给我们一个实际的号码,然后我们返回并用返回的号码替换每个呼叫:
c