一、递归的本质 -宏观语义
- 求解最基本的问题
- 把原问题转为更小的问题
注意: 递归函数就是一个函数,完成一个功能
二、链表的天然递归性
可以理解为一个链表为一个head -> 更短的链表
三、解决问题:
删除链表中重复的元素
public Node remove(ListNode head, int val){
if(head == null){
return null;
}
head.next = remove(head.next, val);
//处理此时head节点值怎么样,如果是val就会把head.next返回
if(head.val == val)
return head.next;
else
return head;
}
例如: 6->7->8->null 删除7 remove函数返回的是删除元素之后的链表。此时的链表就是:head + head.next(删除元素之后的链表); 此刻我们判断头结点head,如果是val 则会返回这个head.next给上一层; 如果不是val则会返回head给上一层,也就是原封不动
四、递归调用的代价
函数调用 + 系统栈的空间