合并两个有序链表 --- 递归
目录
一:题目
二:算法原理
三:代码
四:递归相关总结
一:题目

题目链接:https://leetcode.cn/problems/merge-two-sorted-lists/
二:算法原理

三:代码
class Solution {
public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {//递归出口if(l1 == nullptr) return l2;if(l2 == nullptr) return l1;//比较两个节点大小,选择小节点if(l1->val <= l2->val){l1->next = mergeTwoLists(l1->next,l2);return l1;}else{l2->next = mergeTwoLists(l1,l2->next);return l2;}}
};
四:递归相关总结
1.循环 VS 递归
循坏(迭代)与递归本质上都是解决重复的子问题,所以二者在理论上是可以转换的

例如上面数组的打印,使用循环和递归都可以做到
但是在实践过程中,有的时候使用循环方便,而有的时候使用递归方便,我们应该在什么情况下使用循环,什么时候使用递归呢?
2.递归 VS 深搜
递归的展开图实际上就是一颗树做一次深度优先遍历,所以二者没有区别

我们应该在什么情况下使用循环,什么时候使用递归呢?对于这个问题的解决,就与深搜是树的形状有关

但并不是所有情况都是这样,有的题目如果有特殊要求需要储存一些特殊信息什么的,可能此时使用循环也会比较麻烦
3.先序遍历 VS 后续遍历

递归的位置不同打印的顺序也会产生不同
中序遍历是二叉树特有的打印方式,多叉树中只有先序遍历和后序遍历
