黑马程序员技术交流社区

标题: 递归的弊端 [打印本页]

作者: PDH    时间: 2015-9-8 18:52
标题: 递归的弊端
递归的弊端:
       关于递归虽然表面看起来很简洁,明了。例如最常见的斐波那契函数用递归实现,具体代码如下:
public class DiGuiTest {

        /**
         * 递归实现斐波那契函数
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                System.out.println(DiGui(6));
        }
        public static int DiGui(int n){
                if(n==1 || n==2)
                        return 1;
                else
                        return DiGui(n-1)+DiGui(n-2);
        }
}

其实也是有他的弊端的,递归在完成最后的运算时,返回值会再次重新倒着递归一次。因为执行过程是函数f(n)执行到下一个f(n),再执行到下一个f(n).......所以返回的时候也是从最好一个f(n)返回,然后再从倒数第二个f(n)返回。因为计算机底层记录了你的执行过程,所以才会倒着递归返回值。因此递归是比较费时的。上面的例子从45开始我的电脑就明显输出值就慢了。因此递归最好用迭代来实现,提高效率。
       至于上面大家可以在最后的return上面加断点,逐步执行,观察返回值的过程就能看到上面所说的情况。

作者: PDH    时间: 2015-9-8 18:53
如果有不同意见欢迎交流




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2