(原创)关于递归的一点点笔记
今天和BOSS在QQ上聊天,他说他写了一个很牛B的lambda写的递归自调用的类,还给我传过来,让我研究下,说懂了的话你的lambda也就毕业了~我那个汗啊~马上打开代码,傻眼了~~完全看不懂~~我再仔细琢磨,突然发现不知道递归是怎么一回事,我那个汗啊~大三学的数据结构都忘记了,马上谷歌百度一起上,找到了一个不错的递归代码
1 class Program
2 {
3 static void Main()
4 {
5 Program pr = new Program();
6 pr.Count(3);
7 }
8 public void Count(int intval)
9 {
10 if (intval == 0)
11 {
12 return;
13 }
14 Count(intval - 1);
15 Console.WriteLine("{0}", intval);
16 }
17 }
2 {
3 static void Main()
4 {
5 Program pr = new Program();
6 pr.Count(3);
7 }
8 public void Count(int intval)
9 {
10 if (intval == 0)
11 {
12 return;
13 }
14 Count(intval - 1);
15 Console.WriteLine("{0}", intval);
16 }
17 }
我一看这不简单,肯定是3,2,1。可是答案却是1,2,3
我觉得不对头,于是写了个断点调试了一下,运行到return之后,Count(intval - 1)开始不断地重复,把原来的值都恢复了过来。
实在不明白递归为什么会是先进后出?找了点资料。
总结递归的用法,可以用一句话来形容,“层层递进,原路返回”,正如上边的程序所示。每次调用Count方法时,只要intval的值!=0就会继续调用count方法,这叫做层层递进。但Count函数是要返回值的,如果没有得到返回值,函数就会被挂在那里,等待着返回值,有了函数才能算执行完毕,程序才能往下继续执行。在层层递进地过程中,当intval=0的时候,这时就到了”原路返回”的时候了.由于刚才挂起的函数都在等返回值。所以一旦有了返回值函数要一个一个的退出,本着先进后出的原则一个一个的给它的上级函数一个返回值最后当退到intval为3时 就出现了我们所要的结果。
本文章如标注为原创,转载时请注明出处!