我无法理解该代码的递归代码
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
我听不懂。
答案 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>