javascript - 细化函数的递归逻辑,在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');
为什么是这样的结果:
记录器 钥匙 记录器 记录器 记录器 钥匙 记录器 钥匙 记录器 钥匙 记录器 记录器 记录器 钥匙 记录器
我无法理解。
解决方案
也许一个小图形可以帮助你。该函数现在显示两个调用之间和函数末尾之间的条目。它对每个进一步的级别都有一个缩进并显示侧面,这意味着如果第一次或第二次调用 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>
推荐阅读
- c# - 始终返回 true 的替代表达式
- java - Mockito 的 thenCallRealMethod ,不调用公共方法
- r - 如何根据二进制向量中的元素对数据框中的列进行子集化
- dart - 如何使用我的 dart 包私有而不在 pub dart lang 上显示?
- c++ - 试图让 std::make_pair 接受超过 2 个参数
- angular - Angular FormGroup 作为输入值
- jenkins - groovy.lang.MissingPropertyException:没有这样的属性:类的脚本:groovy.lang.Binding
- ios - 快速添加任意两个数字元组
- c - CSAPP malloc 实现
- java - 从 Either 中取消装箱值
vavr