A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© PDH 中级黑马   /  2015-9-8 18:52  /  851 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

递归的弊端:
       关于递归虽然表面看起来很简洁,明了。例如最常见的斐波那契函数用递归实现,具体代码如下:
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上面加断点,逐步执行,观察返回值的过程就能看到上面所说的情况。

1 个回复

倒序浏览
如果有不同意见欢迎交流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马