1. 什么是递归算法:递归算法,就是直接或者间接地调用自身的算法。
2. 运用递归算法的几个编程问题:
(1) 有一列数据:1、1、2、3、5、8、13、21、34,求第30位数字是多少。
public class DiGuiOne {
public static void main(String[] args) {
long res = method(inPut);
System.out.println("第"+inPut+"位数字是:"+res);
}
public static long method(int num){
long result = 0;
if(num<2){
result = 1;
}else{
result = method(num-1)+method(num-2);
}
return result;
}
}
(2) 计算 n! 的算法。
public class DiGuiTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入要计算阶乘的数字:");
int n = scan.nextInt();
long result= method(n);
System.out.println("计算出"+n+"的阶乘为:"+result);
}
public static long method(long i){
if(i == 1){
return 1;
}
return i*method(i-1);
}
}
(3) 汉诺塔问题:哈诺塔又称之为河内塔,问题其实是印度的一个古老的传说。开天辟地的神勃拉玛(和中国的盘古差不多的神)在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆金片,最大的一个在底下,其余一个比一小,依次叠上去。庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。
public class Hanio{
public static void main(String args[]){
int i=3;
char a='A', b='B', c='C';
hanio(i,a,b,c);
}
public static void hanio(int n, char a, char b, char c){
if(n==1){
System.out.println("移动"+n+"号盘子,从"+a+"到"+c);
}else{
hanio(n-1, a, c, b); //把上面n-1个盘子从a借助b搬到c
System.out.println("移动"+n+"号盘子,从"+a+"到"+c); //直接把n搬到c
hanio(n-1, b, a, c); //再把b上的n-1个盘子借助a搬到c
}
}
}