阐述函数的递归逻辑,在javascript中多次调用

时间:2019-07-05 07:07:23

标签: javascript

我无法理解该代码的递归代码

function logic(n, a, b) {
  if (n === 1) return;
  logic(n - 1, b, a);
  console.log(a);
  logic(n - 1, b, a);
}
logic(5, 'key', 'logger');

为什么会这样:

logger
key
logger
logger
logger
key
logger
key
logger
key
logger
logger
logger
key
logger

我听不懂。

1 个答案:

答案 0 :(得分:0)

也许一个小的图形可以帮助您。现在,该函数将显示两个调用之间的中间条目以及该函数的结尾。它在每个级别上都有一个缩进,并显示侧面,这意味着是复活中的第一轮还是第二轮。

每个呼叫的模式是

start
             / recursion to left, swap key/logger
key/logger  *                    
             \ recursion to right, swap key/logger
end    

function log(...a) {
    out.innerHTML += a.join(' ') + '\n';
}

function logic(n, a, b, level = 0, side = '') {
    log(''.padStart(level * 4), level, 'start', side);
    if (n === 1) return;
    logic(n - 1, b, a, level + 1, side + 'l');
    log(''.padStart(level * 4), level, side, a);
    logic(n - 1, b, a, level + 1, side + 'r');
    log(''.padStart(level * 4), level, 'end', side);
}

logic(5, 'key', 'logger');
<pre id="out"></pre>