定义:程序调用自身的编程技巧,先递进,再回归。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
构成递归需具备的条件:
- 子问题须与原始问题为同样的事,且更为简单;
- 不能无限制地调用本身,须有个出口,化简为非递归状况处理
- 数据的结构形式是按递归定义,如二叉树、广义表
package com.yan.study.algorithm.queue;
/**
* letCode中链表的递归删除
* @param
*/
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
//head->5->6->4->6->null val=6
public ListNode removeElements(ListNode head, int val) {
//先找到最基本的问题答案
if(head == null ){
return head;
}
//head 5->6->4->6->null
ListNode res = removeElements(head.next,val);
//如果head和val相等删除head
if(head.val == val){
return res;
}else{
head.next = res;
return head;
}
}
}