这种相互递归逻辑如何工作?

时间:2018-08-22 22:50:39

标签: javascript recursion mutual-recursion

下面的代码返回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);
}

1 个答案:

答案 0 :(得分:1)

您提到在尝试时,您得到了36,所以我猜您只是忘记了必须回溯调用堆栈并从{{1 }}函数。由于此递归链最终调用了+ 1三次,因此您的结果是c

但是,我们可以逐步进行。我在这里所做的所有工作都列在每个电话中。我们继续沿着链条前进,直到其中一个函数给我们一个实际的号码,然后我们返回并用返回的号码替换每个呼叫:

c