理解递归首先要明白递归是用栈来实现的,而栈的特点就是先进后出。
eg1:
解析:递归是利用栈来实现的。被调函数地址首先存入栈,存在栈底部红色部分,然后f(5)入栈,f(4)、f(3)、f(2)、f(1)依次入栈,由于当n=1时候,f(1)可以被求解,f(1)出栈,栈顶指针top--,依次解析f(2)、f(3)、f(4)、f(5),最后返回被调函数地址。
一般情况递归不断越调越小,直到最后一个调用(一般就是最小的f(1))结束后(也就是有确切的结果了),就会返回上一级的函数调用,最终返回大第一次的递归调用(逐级返回)
eg2:
先序遍历算法如上
解析:先序代码里有两个递归调用,执行的顺序就如我上图那样,先一个一个的来。先调用第一个递归,然后第一个递归调用的过程中又会继续调用递归,层层往下,知道最后一个为null的时候才返回上一级。上一级的第一个递归后面还有一个递归,所以继续去执行上一级的后一个递归。直到上一级的两个递归都执行完毕就继续返回更上一级,然后就这样依次的返回。直到最后返回到最初一级,这时候第一级的第一个调用才执行完毕,然后才执行第一级的第二个递归。这第二个递归执行的过程也是跟上面的一样的。