JAVA递归算法实例小结
来源:互联网 发布:一个社交软件 英语 编辑:程序博客网 时间:2024/05/22 04:42
一、递归算法设计的基本思想是:
对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解。
在做递归算法的时候,一定要把握住出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口是非常好理解的,就是一个条件,当满足了这个条件的时候我们就不再递归了。
(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);}}
(3)汉诺塔
要求:汉诺塔挪动
实现:
private static final String DISK_B = "diskB"; private static final String DISK_C = "diskC"; private static final String DISK_A = "diskA"; static String from=DISK_A; static String to=DISK_C; static String mid=DISK_B; public static void main(String[] args) { String input=JOptionPane.showInputDialog("please input the number of the disks you want me move."); int num=Integer.parseInt(input); move(num,from,mid,to); }
// 利用递归实现汉诺塔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);}}
(4)排列组合
要求:将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc",
则程序会输出
abc
acb
bac
bca
cab
cba
实现:
public static void permute(String str) { char[] strArray = str.toCharArray(); permute(strArray, 0, strArray.length - 1);}
// 利用递归实现,将输入的一个字符串中的所有元素进行排序并输出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[i];}System.out.println(cout);} else {for (i = low; i <= high; i++) {char temp = list[low];list[low] = list[i];list[i] = temp;permute(list, low + 1, high);temp = list[low];list[low] = list[i];list[i] = temp;}}}
总结递归算法来说,这个根就是那个出口,只要找到这个出口所在,那么算法自然而然就能水到渠成了。
参考资料一:http://blog.csdn.net/lfsf802/article/details/7696405
参考资料二、http://nevergives.blog.sohu.com/95934843.html
- JAVA递归算法实例小结
- JAVA递归算法实例小结
- java递归算法小结
- Java递归算法实例
- java递归算法入门小结(一)
- 递归算法小结
- 递归算法小结
- 递归算法经典实例
- 递归算法实例讲解
- 递归算法实例
- 递归算法实例讲解
- 递归算法实例
- 递归算法实例讲解
- 递归算法实例讲解
- java(22)------java递归算法实例和分析
- java算法:递归算法
- java递归实例
- java递归简单实例
- jquery 评论(2) jQuery对表单元素的取值和赋值操作
- java 读取本地文件的多种方式及对文件的各种操作
- SQLITE使用小方法 insert和update混合使用
- 查询时间和scn号对应的表
- Android Location
- JAVA递归算法实例小结
- LIBXML2库使用指南
- KDESVN中commit时出现containing working copy admin area is missing错误提示
- Memcached源码分析之内存管理
- c有关函数指针数组
- Android的Location功能代码
- getAttribute和getParameter的区别
- 博客地址迁移到www.mingjianhua.com
- SQL语句中的rank () over , row_number() over ,rank_dense () over