递归
递归:函数会调用自身。
递归是一种编程模式。
递归思维方式会使代码更简单,更容易维护。
例:计算 n 的 x 次方
使用循环
js
const pow = (n, x) => {
let result = 1;
for (let i = 1; i <= x; i++) {
result = result * n;
}
return result;
};使用递归
js
const pow = (n, x) => {
if (x <= 1) return n;
return n * pow(n, x - 1);
};或者更简洁
js
const pow = (n, x) => (x === 1 ? x : n * pow(n, x - 1));最大的嵌套调用次数被称为 递归深度。
最大递归深度受限于 JavaScript 引擎。
引擎在最大迭代深度为 10000 及以下时是可靠的 。
递归 与 循环
因为递归会产生新的 执行上下文,所以递归会更占内存。
任何递归都可以用循环来重写。
但是 递归可以使代码更短,更易于理解和维护。
大多数时候我们需要一个好代码。
递归结构
todos
js
let list = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null,
},
},
},
};
数组是有序集合,在头部或者中间 插入删除 数据的代价都很大。
通过递归结构产生的 链表元素,就没有这个问题。可以为所欲为。