递归经典例题
1.求斐波那契数列
public class RecursionDemo {
// 递归求斐波那契数列第n项
public static int fibonacci(int n) {
// 边界条件:第1项和第2项均为1
if (n == 1 || n == 2) {
return 1;
}
// 递归公式:F(n) = F(n-1) + F(n-2)
return fibonacci(n - 1) + fibonacci(n - 2);
}
public static void main(String[] args) {
// 测试:输出前10项斐波那契数列
System.out.println("斐波那契数列前10项:");
for (int i = 1; i <= 10; i++) {
System.out.print(fibonacci(i) + " ");
}
// 输出结果:1 1 2 3 5 8 13 21 34 55
}
}
2.求两数之间最小公倍数
public static int gcd(int m,int n){
if(n==0)
return m ;
return gcd(n,m%n);
}
3.递归进行插入排序
从数组最后一个往前插入排序,对数组排序等价于对0-倒数第二个元素这部分排序,再把最后一个元素插进去
public static void insertSort(int arr[],int k){
if(k==0){
return;}
insertSort(int arr[],int k-1);
int x = arr[k];
int index = k-1;
while((index>-1)&&(x<arr[index])){
index--;
}
while()
}
3.汉诺塔问题

1、找到一种划分方法
2、找到递推公式或者等价转换
都是父问题转化为求解子问题
根据参数变化的趋势,对边界进行控制,适时终止递归
1-N从A移动到C,B作为辅助
等价于:
1、1~N-1从A移动到B,C为辅助
2、把N从A移动到C
3、1~N-1从B移动到C,A为辅助
public class TowerOfHanoi {
public static void main(String[]args)
printHanoi Tower( 3,A,B,C)
//将N个盘子从source移动到target的路径的打印
N:初始的N个从小到达的盘子,N是最大编号
source :原始柱子
auxiliary :辅助的柱子
target :目标柱子
static void printHanoiTower(int N, String source, String auxiliary, String target){
if(N==1){
System.out.println("move"N+"from"+source+" to"+target);
return;
} else{
//把1~N-1个盘子移到辅助盘上
printHanoiTower( N-1,source, target,auxiliary);
//N可以顺利到达target
System.out.println("move+N+"from"+source +" to”+target);
//将N-1个盘子挪到target
printHanoiTower( N-1,auxiliary ,source,target);
}}
