递归到底是什么?
众说纷纭:
1.递归是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
2.递归就是一种方式,所有的递归都可以用循环替代
3.从前有座山,山里有个庙,庙里有个老和尚正在讲故事:从前有座山,山里有个庙,庙里有个老和尚正在讲故事:从前有座山,山里有个庙,庙里有个老和尚正在讲故事...
这就是递归原理...递归算法得有递归出口,否则就会死循环...递归算法效率较低,占用栈空间较大,容易发生栈溢出.
4.递归处理代码简洁外,还有个好处,就是你在循环前,不知道循环的层次是多少时,用递归比较方便,譬如遍历树、遍历磁盘文件等,在循环前,你根本不知道磁盘有多少个文件夹和文件,调用递归无需事先知道这些,只要找到最后文件夹时返回就可以了
5.递归分为2种,直接递归和间接递归。
直接递归,比如方法A内部调用方法A自身
间接递归,比如方法A内部调用方法B,方法B内部调用方法C,方法C内部调用方法A
6.它也没什么特别的原理,就是方法调用 ,方法调用 就是在压栈,只是它特殊中方法自己调用 自己,其实和调用 其它方法完全 一样,递归中值得注意的是它的弹出 条件,要不可能选成死循环.
7.函数被调用还未结时再调用函数,则会保存当前状态,入栈,依次类推,当最后一个函数执行完后,倒数第二个函数出栈,再也倒数第一个函数的结果进行计算,依次类推;并且:函数是被放在程序区的,函数调用实际上就是取得函数在内存中的地址,执行内存中的机器码;
上面都应该都是对的,那递归是什么已经知道,那我们何时,或者说怎么去用递归来解决问题。虽然递归算法被称为一种算法,我觉得更像一个思想,其衍生算法有很多,如并归排序,快速排序,背包问题,八皇后问题等等。
仅仅理解递归算法还是不够,最重要的实践,真正需要掌握的并不是一种算法,而是一种去分析问题并解决问题的的办法。个人拙见,如有错误,多多包含。