JS中的递归

递归

1.一种编程模式

2.当一个函数解决一个任务时,在解决的过程中它可以调用很多其它函数。在部分情况下,函数会调用 自身。这就是所谓的 递归

3.引擎限制了递归深度,而递归深度等于堆栈中上下文的最大数量。

4.递归中的上下文占用内存,但递归代码更短,属于易于理解和维护的好代码。

5.循环算法更节省内存,任何递归都可以用循环来重写,通常循环变体更有效。

6.应用
递归遍历—适用于任何层次的子部门嵌套。
递归结构—“链表”—某些情况下,可能是优于数组的选择。

7.当我们必须对数组内的在尾端以外的元素进行更快速的插入/删除操作时,可以选择另一种叫做 链表 的数据结构。

8.链表
let list = { value: 1 };
list.next = { value: 2 };
list.next.next = { value: 3 };
list.next.next.next = { value: 4 };
list.next.next.next.next = null;

拆分链表:
let secondList = list.next.next;
list.next.next = null;

合并链表:
list.next.next = secondList;

将新值添加到链表头部
list = { value: “new item”, next: list };

从中间删除一个值,可以修改前一个元素的 next
list.next = list.next.next;

9.缺点
无法很容易地通过元素的编号获取元素,需要从起点元素开始,顺着 next 找 N 次才能获取到第 N 个元素。

10.链表增强
(1)可在 next 之外,再添加 prev 属性来引用前一个元素,以便轻松地往回移动。
(2)可添加一个名为 tail 的变量,该变量引用链表的最后一个元素(并在从末尾添加/删除元素时对该引用进行更新)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值