之前看了许多关于递归的理解,还是是懂非懂的,这个问题一直纠结在心里。
今天又碰到这个递归问题了,我认为一定要把问题分析清楚了,以后再遇到这样的问题或者类似问题才能轻车熟路,不然又要头疼或者成为问题的瓶颈了。
1)讲到递归,我觉得先从函数说起,递归首先是一个函数,具有函数的一切功能,即写一个递归要有函数的形式。比如 void function()。
2) 递归的定义,即递推和回归,即把一个大问题分成有限的小问题,并且通过这些小问题的解决,最后把大问题可以解决。
3)递归函数的格式,重要的是有个出口,即一个递归结束的条件,比如 if(btree->data=='#'),最后有个return 。
4)对递归的挖掘。递归实际是个栈的问题,而栈的特点是FILO,即先进后出。而每层栈保存了一个函数所具有的局部变量、函数返回地址,函数返回值等内容。这样当递归返回时,这层栈便被销毁,即这层栈的空间被释放,函数调用进入到上层中。
5)当递归结束时,便返回了调用该递归的地方处。
6)可以把递归看成一个算法,很多问题要用到递归,比如树。实际上算法的本质也是一个程序,这样当看到本质时,算法就没有那么吓人了。
7)递归也有缺点,比如耗时间和空间,就像人类虽然很强大也有自身的缺点一样,完美的存在只在于追求的过程和一颗平静的心。