数据结构与算法-递归思想

递归

将问题转化为更小的同一问题

范例

sum求和

如下所示,将一个庞大的转化成若干个小问题
递归本质就是一个函数,我们在编程中不要特别纠结递归,把递归当作一个子函数即可。

 // 计算arr[l...n)这个区间内所有数字的和
    private static int sum(int[] arr, int l){
        if(l == arr.length)//终止条件
            return 0;
        return arr[l] + sum(arr, l + 1);//问题切割
    }

数据结构与算法-递归思想_第1张图片

链表与递归

如下所示,将删除拆分成若干个头节点与子链的情况,若待删节点是头节点则返回自连,若在子链中继续递归,直到递归至链表终点位置

public ListNode removeElements(ListNode head, int val) {

        if(head == null)
            return head;

        head.next = removeElements(head.next, val);
        return head.val == val ? head.next : head;
    }

递归的代价

  1. 极限情况下会使用大量的堆栈空间
  2. 若不处理终止条件,将永不停止递归

你可能感兴趣的:(算法,算法,数据结构,链表,堆栈,leetcode)