黑马程序员技术交流社区

标题: JAVA递归算法一个小总结让大家一看就能明白 [打印本页]

作者: luklon    时间: 2016-9-12 14:50
标题: JAVA递归算法一个小总结让大家一看就能明白

递归算法设计的基本思想是:

        对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解。

      在做递归算法的时候,一定要把握住出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口是非常好理解的,就是一个条件,当满足了这个条件的时候我们就不再递归了。

关键要抓住的是:
(1)递归出口

(2)地推逐步向出口逼近


(1)阶乘:

          要求:给定一个数值,计算出它的阶乘值,例如5的阶乘为5*4*3*2*1

          实现:

[Java] 纯文本查看 复制代码
private static BigDecimal getNum(BigDecimal inNum) {  
        if (inNum.compareTo(BigDecimal.ONE) == 0) {  
            return inNum;  
        }  
        return inNum.multiply(getNum(inNum.subtract(BigDecimal.ONE)));  
    }


Fibonacci数列

[Java] 纯文本查看 复制代码
 private static int fab(int index) { 

        if (index == 1 || index == 2) {  
            return 1;  
        } else {  
            return fab(index - 1) + fab(index - 2);  
        }  
    }


汉诺塔

          要求:汉诺塔挪动

          实现:

[Java] 纯文本查看 复制代码
  private static void move(int num, String from2, String mid2, String to2) {  
        if (num == 1) {  
            System.out.println("move disk 1 from " + from2 + " to " + to2);  
        } else {  
            move(num - 1, from2, to2, mid2);  
            System.out.println("move disk " + num + " from " + from2 + " to " + to2);  
            move(num - 1, mid2, from2, to2);  
        }  
    }



排列组合

          要求:将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc",

                      则程序会输出

                      abc
                      acb
                      bac
                      bca
                      cab
                      cba


[Java] 纯文本查看 复制代码
 public static void permute(char[] list, int low, int high) {  
        int i;  
        if (low == high) {  
            String cout = "";  
            for (i = 0; i <= high; i++) {  
                cout += list;  
            }  
            System.out.println(cout);  
        } else {  
            for (i = low; i <= high; i++) {  
                char temp = list[low];  
                list[low] = list;  
                list = temp;  
                permute(list, low + 1, high);  
                temp = list[low];  
                list[low] = list;  
                list = temp;  
            }  
        }  
    }



作者: 张弗睿    时间: 2016-9-12 14:59
恍然大悟 ,感谢大神的点拨
作者: 383412263    时间: 2016-9-12 16:47
最近在看,谢谢分享




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