一、题目描述:
二、递归函数的两个要点:
递归函数必须要有终止条件,否则会出错;—>一个跳出执行过程的出口
递归函数先不断调用自身,直到遇到终止条件后进行回溯,最终返回答案。
三、过程分析
可以使用一个动画,来让过程更加清晰明了:
四、Java代码实现
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
// 递归
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
// 先考虑极端情况下递归的终止
if(l1==null){
return l2;
}else if(l2==null){
return l1;
}else if(l1.val<l2.val){
l1.next=mergeTwoLists(l1.next,l2);
return l1;
}else{
l2.next=mergeTwoLists(l1,l2.next);
return l2;
}
}
}
五、心得
Recursion递归,最重要的就是两个条件:
1. 一个可以反复执行的递归过程
2. 一个跳出执行过程的出口
不要过多执着于每一次递归的时候到底如何执行的,只需要从一次中找出上述两个条件之后,进行“尾递归”即可。