Java递归算法
1、什么是递归算法
就是在方法内部调用方法自己本身
2、案例
案例1:斐波那契数列
菲波那契数列指的是这样一个数列:
1,1,2,3,5,8,13,21,34,55,89,144…
分析:这个数列从第三项开始,每一项都等于前两项之和
参考代码:
import java.util.Scanner;
public class Fbnq_shulie {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n =s.nextInt();
System.out.println("斐波那契数列的第"+n+"位元素是:"+feibo(n));
}
public static int feibo(int n){
if(n == 1){
return 1;
}
if(n == 2){
return 1;
}
return feibo(n-1)+feibo(n-2);
}
}
运行结果:
案例2:汉诺塔问题
输入一个正整数n,表示有n个盘片在第一根柱子上。输出操作序列,格式为“移动 t从 x 到 y”。每个操作一行,表示把x柱子上的编号为t的盘片挪到柱子y上。柱子编号为A,B,C,你要用最少的操作把所有的盘子从A柱子上转移到C柱子上。
参考代码:
public class hannuota {
public static void main(String[] args) {
int i = 4;
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
}
}
运行结果: