http://www.cnblogs.com/zysbk/archive/2012/11/16/2773819.html 原文
下面再给大家复习下递归:
什么叫递归呢?“和尚讲故事”,就是方法自己调自己,这就是递归。
三、方法自己调自己
我们先调下T1方法,让大家看个东西:
四、让大家看的东西
五、调用堆栈
用堆栈来监视一下:
一开始调了main方法
再调T1方法
再调T2方法
注意一下顺序,类似于栈结构,先进来在最下面,后进来在最上面。
刚T2方法执行完毕,T2方法没了。
调完之后,从栈里面出来了。
再看下我调Say方法。
一开始还是调的main方法,
一直在调Say方法,这个栈越来愈大,直到系统报错。
六、溢出,系统报错
递归里面注意的地方:一定要有终止条件。
接下来我们看两个例子:
七、这个方法的执行结果是什么呢?
如果代码中加上:index++; 又是什么答案呢?
不让用VS测试的时候,自己可以在纸上用纸和笔划一下。
有一些个公司喜欢用这种装逼的题目当面试题的。
答案是4a4b,为什么是这样呢?
我们画图进行分析:
八、例一分析图示
对于初学者来讲,这幅图可能还是比较的抽象,所以,建议调试一下。
九、例一分析图示二
十、例二代码
大家再想想,这段代码的输出结果。考验人类思维极限呦。
下面我们还是画个图就行演示:
十一、例二分析图
n在自己的作用域范围内,互不影响。
在做一个程序的时候,能用循环做的,就不要用递归来做。用递归的话,效率极其低下。
想深入研究的朋友可以看下关于:尾递归优化的问题。
在上面两个题目中递归因为栈,才能记住,执行完后面调的方法之后返回去调没有执行完的方法里面的语句。
下面我们看下递归加载和递归删除: