- 递归函数的调用,本质就是函数调用
数组求和递归解读
1 | public static int sum(int[] arr,int l) |
1 | public static int sum(int[] arr,int l) |
递归分析
- 数组 arr = [6,10],调用sum(arr,0),l=0,进入第二句,int x = sum(arr,l+1),进入步骤2,这时l+1;
- 调用sum(arr,1),l=1,进入第二句,int x = sum(arr,l+1),进入步骤3,这时l+1;
- 调用sum(arr,2),l=2,返回0;返回步骤2继续执行;
- int res = arr[l]+x; l = 1,arr[1] = 10,res=10,返回res,继续执行步骤1;
- int res = arr[l]+x,l = 0,arr[0] = 6,res=16,返回res,执行完毕。
链表递归解读
1 | public Listpublic class Solution |
- 对链表6->7->8->null调用,执行语句1,不为空,执行语句2,head.next = ?,调用函数removeElements(head.next,val),执行步骤2;
- 对链表7->8->null调用,执行语句1,不为空,执行语句2, head.next = ?,调用函数removeElements(head.next,val),执行步骤3;
- 对链表8->null调用,执行语句1,不为空,执行语句2,head.next = ?调用函数removeElements(head.next,val),执行步骤4;
- head.next = null,执行语句3,不是7,返回null,执行步骤3;
- head.next=null,执行语句3,返回8->null,执行步骤2;
- head.next=8->null,这时链表为7->8->null,执行语句3,是7,删除返回8->null,执行步骤1;
- head.next=8->null,这时链表为6->8->null,执行完毕。
- 程序调用的系统栈
- 递归调用代价:函数调用+系统栈空间