递归
1、将原来的问题转化为更小的同一问题。
- 数组求和
Sum(arr[0…n-1])=arr[0]+Sum(arr[1…n-1])
Sum(arr[1…n-1])=arr[1]+Sum(arr[2…n-1])
…
Sum(arr[n-1…n-1])=arr[n-1]+Sum(arr[])
public static int sum (int [] arr,int l){
if(l==arr.length)//求解最基本的问题
return 0;
return arr[l]+sum(arr,l+1)//把原问题转化为更小的问题
2、注意递归函数的宏观语意,递归函数就是一个函数,完成一个功能。
链表的递归性
- 解决链表中删除元素的问题
public ListNode removeElements(ListNode head, int val) {
if(head == null)
return head;
ListNode res = removeElements(head.next, val);//利用递归删除元素
if(head.val == val)
return res;
else{
head.next = res;
return head;
}
}