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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 2666fff 中级黑马   /  2015-5-9 23:55  /  194 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、递归算法设计的基本思想是:
        对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解。
      在做递归算法的时候,一定要把握住出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口是非常好理解的,就是一个条件,当满足了这个条件的时候我们就不再递归了。

关键要抓住的是:
(1)递归出口
(2)地推逐步向出口逼近


二、递归算法实例
(1)阶乘:
          要求:给定一个数值,计算出它的阶乘值,例如5的阶乘为5*4*3*2*1
          实现:// 利用递归实现一个数的阶乘值
    private static BigDecimal getNum(BigDecimal inNum) {
        if (inNum.compareTo(BigDecimal.ONE) == 0) {
            return inNum;
        }
        return inNum.multiply(getNum(inNum.subtract(BigDecimal.ONE)));
    }

(2)Fibonacci数列:1,1,2,3,5,8,13……
           要求:找出数列中指定index位置的数值
           实现:
// 利用递归实现了Fibonacci数列
    private static int fab(int index) {
        if (index == 1 || index == 2) {
            return 1;
        } else {
            return fab(index - 1) + fab(index - 2);
        }
    }





2 个回复

倒序浏览
抢个沙发!!  赞一个
回复 使用道具 举报
先占坑!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马