首页 > 解决方案 > 细化函数的递归逻辑,在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');

为什么是这样的结果:

记录器
钥匙
记录器
记录器
记录器
钥匙
记录器
钥匙
记录器
钥匙
记录器
记录器
记录器
钥匙
记录器

我无法理解。

标签: javascript

解决方案


也许一个小图形可以帮助你。该函数现在显示两个调用之间和函数末尾之间的条目。它对每个进一步的级别都有一个缩进并显示侧面,这意味着如果第一次或第二次调用 resursion。

每个呼叫的模式是

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>


推荐阅读