递归理解问题

来源:5-3 递归基础与递归的宏观语意

慕前端8962423

2019-11-29

波波老师好,这几天开始复盘本课,今天看到ListNode的删除问题的时候,突然想着增加一个removeFirstElement方法:

    public ListNode removeFirstElement(ListNode node, int val) {
        if (node == null) return null;
        if (node.val == val) {
            return node.next;
        }
        node.next = removeFirstElement(node.next, val);
        return node;
    }

经过验证结果是正确的。

同时尝试给递归划分个阶段,我想问下站在您的角度来看,这样的划分合适吗,是否有可能会对更复杂的递归情境造成理解障碍。

我的划分过程如下:
图片描述
然后把求和代码做了一点类似几何中的辅助线功能的小改动:
图片描述

写回答

1回答

liuyubobobo

2019-11-30

如果你的 removeFirstElement 指删除第一个值为 val 的元素,没有问题。代码的解析也很正确:)


不过一般我不喜欢分“有穷终止”和“需求终止”这样的条件(实际上这是我第一次听说这样的名词)。在我看来,都是终止条件。但是终止条件有可能有多种,面对终止条件,也有可能产生不同的逻辑。


不过这无所谓,只要有助于你的理解,就是可以的:)


继续加油!:)

0
1
慕前端8962423
非常感谢! 这个划分确实草率,引用课程笔记修正下: 1. 求解最基本问题,最基本问题是不能自动求解的,得程序员自己编写。 2. 把原问题转化为更小的问题
2019-12-02
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程