今日来连连碰到递归算法的使用,于是自己便花时间看了一下。以下作为总结:
学过程序设计的朋友都知道,存在自调用的算法称作递归算法。递归算法设计的基本思想是:对于一个复杂的问题,把源问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递归的出口,这样源问题就有递归的解。
1、阶乘的求法。最简单的,也是最经典的题目。
package 递归;
public class rec1 {
/**
* @param 求解n!
*/
public static void main(String[] args) {
rec1 rec1 = new rec1();
System.out.println(rec1.fun(5));
}
public int fun(int num){
if(num==1) return 1;
return num*fun(num-1);
}
}
2、给定一个n(n<5000),不停的*2一直到结果>5000为止,然后输出这一连串的数字。如n=3,output:3,6,12,24,48,96,192,384,768,1536,3072。使用循环当然可以但是我们这里使用递归的方法来完成。
package 递归;
public class rec2 {
public static void main(String[] args) {
rec2 rec2 = new rec2();
rec2.fund(3);
}
public void fund(int i){
if((i<<1)<5000) { //左移位相当于*2
System.out.print((i)+",");
fund(i<<1);
}
else {
System.out.print((i));
return;
}
}
}
3、一个射击运动员打靶, 靶一共有 10 环, 连开 10 枪打中 90 环的可能性有多少种?可以使用10