递归&图解Json

一、递归思想

  • 什么是递归?
    递归是指在函数的定义中使用函数自身的方法。也就是一个函数在执行过程中直接或间接地调用自身,通过不断地将原问题分解为规模更小但结构相似的子问题,直到子问题简单到可以直接求解,然后再逐步回溯得到原问题的解。

  • 递归在数据结构方面可以解决的问题
    树形结构操作
    遍历:树的前序、中序、后序遍历都可以使用递归实现。例如,在二叉树中,前序遍历是先访问根节点,然后递归遍历左子树和右子树。
    查找:在树中查找特定节点,递归地在子树中进行查找操作。
    插入与删除:在树结构中插入或删除节点,递归地找到合适的位置进行操作。
    链表操作
    反转链表:递归地反转链表的剩余部分,然后调整指针方向。
    查找链表中的元素:递归地在链表的后续节点中查找目标元素。

  • 递归的几个重要条件

  1. 必须要在一个方法中直接或间接调用自己。
  2. 递归必须要有结束条件,否则会无限递归。递归的结束条件决定递归最终的返回结果或数据状态。
  3. 递归的返回值永远是返回给上一层的调用者。

二、递归案例

  • 使用递归计算0-100的和。

如果使用递归计算可以这样设计参数,第一个参数是当前值,第二个参数是累加值,这两个数执行累加,然后继续调用函数,将下一个值和累加值继续传递,直接最后的值为1,则累加1返回,注意,这里就是递归的结束条件。

    @Test
    public void test() {
   
        System.out.println(sum(100,0));
    }

    public static Integer sum(Integer max,Integer total){
   
        if (max == 1){
   
            return total + 1;
        }
        total = total + max;
        max--;
        Integer sum = sum(max, total);
        return sum;
    }
  • 使用递归组装数据结构
@Data
@Builder
public class Node {
   

    private String id;
    private String parentId;
    private List<Node> children;
}


 public static void main(String[] args) throws Exception {
   

        List<Node> nodes = new ArrayList<>();
        nodes.add(Node.builder().id("A").build());
        nodes.add(Node.builder().id("B").parentId("A").build());
        nodes.add(Node.builder().id("C").parentId("A").build());
        nodes.add(Node.builder().id("D").parentId("B").build());
        nodes.add(Node.builder().id("E").parentId("B").build());
        nodes.add(Node.builder().id("F").parentId(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值