什么是递归呢?函数在运行时调用自己,这个函数就叫递归函数,调用的过程叫做递归。
比如定义函数 f(x)=x+f(x-1)
若无终止条件,则这时程序会无休止地运行下去,直到崩溃。
因此,递归最重要的两点:
- 递归函数必须要有终止条件,否则会出错;
- 递归函数先不断调用自身,直到遇到终止条件后进行回溯,最终返回答案。
例:合并两个排序链表
1、终止条件:当两个链表都为空时,表示我们对链表已合并完成。
2、如何递归:我们判断 l1 和 l2 头结点哪个更小,然后较小结点的 next 指针指向其余结点的合并结果。(调用递归)
class Solution {
public:
/*
递归法
*/
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
/* 终止条件*/
if(l1 == nullptr) {
return l2;
}
if (l2 == nullptr) {
return l1;
}
/*递归,当l1指向的值小于l2,则返回l1,并用l1->next指向剩余的部分*/
if (l1->val <= l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
};
参考文献:添加链接描述