递归经典例题

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);

}}

相关推荐
FanXing_zl1 分钟前
快速掌握线性代数:核心概念与深度解析
线性代数·算法·机器学习
7澄114 分钟前
Java 实战:投票统计系统(HashMap 应用)
java·开发语言·intellij-idea·交互·控制台·hashmap
zzzsde15 分钟前
【C++】红黑树:使用及实现
开发语言·c++·算法
q***787815 分钟前
SpringBoot后端服务重定向
java·spring boot·后端
Fantasydg28 分钟前
外卖项目day02
java
Kuo-Teng1 小时前
LeetCode 139: Word Break
java·算法·leetcode·职场和发展·word·动态规划
Algor_pro_king_John1 小时前
模板ACM
算法·图论
前端小L1 小时前
图论专题(六):“隐式图”的登场!DFS/BFS 攻克「岛屿数量」
数据结构·算法·深度优先·图论·宽度优先