递归的应用
2013-02-19 12:27
183 查看
递归是一种编程技术,它利用一个方法调用自身来满足其整个作用
以下介绍两个递归的应用:
1.穿越迷宫(在栈的实现与应用中已经用栈实现了,这里使用递归进行实现)
测试类:
2.大家肯定玩过的游戏(汉诺塔)
测试类:
以下介绍两个递归的应用:
1.穿越迷宫(在栈的实现与应用中已经用栈实现了,这里使用递归进行实现)
package xidian.sl.sortingandsearching; public class Maze2 { //表示移动有效,网格方块会从1变成3 private final int TRIED = 3; private final int PATH = 7; //用二维数组来模拟迷宫,1表示路径畅通,0表示路径不同 private int[][] grid = {{1,1,1,0,1,1,0,0,0,1,1,1,1}, {1,0,1,1,1,0,1,1,1,1,0,1,1}, {0,0,0,0,1,0,1,0,1,0,1,0,0}, {1,1,1,0,1,1,1,0,1,0,1,1,1}, {1,0,1,0,0,0,0,1,1,1,0,0,1}, {1,0,1,1,1,1,1,1,0,1,1,1,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0}, {1,1,1,1,1,1,1,1,1,1,1,1,1} }; public boolean traverse(int row, int column){ boolean done = false; if(valid(row, column)){ //标志该位置有效 grid[row][column] = TRIED; //判定是否已经到达右下角,即走出迷宫 if(row == grid.length-1 && column == grid[0].length-1){ done = true; }else{ //向下走 done = traverse(row + 1, column); //down if(!done){ //向右走 done = traverse(row, column + 1); //right } if(!done){ //向上走 done = traverse(row - 1, column); //up } if(!done){ //向左走 done = traverse(row, column - 1); //left } } if(done){ grid[row][column] = PATH; } } return done; } //用于判断指定行/列的移动是否有效,当移动仍然处于网格内并且指定位置处存放着1,则认为此次移动有效,返回true private boolean valid(int row, int column){ boolean result = false; if(row >= 0 && row < grid.length && column >= 0 && column < grid[row].length){ if(grid[row][column] == 1){ result = true; } } return result; } //重写toString方法 public String toString(){ String result = "\n"; for(int row = 0; row < grid.length; row++){ for(int column = 0; column < grid[row].length; column++){ result += grid[row][column] + ""; } result += "\n"; } return result; } }
测试类:
package xidian.sl.sortingandsearching; /** * 递归解决穿越迷宫问题 * */ public class MazeSearch { public static void main(String[] args) { Maze2 labyrinth = new Maze2(); System.out.println(labyrinth); if(labyrinth.traverse(0, 0)){ System.out.println("成功穿越"); }else{ System.out.println("没有可能穿越的路"); } System.out.println(labyrinth); } }
2.大家肯定玩过的游戏(汉诺塔)
package xidian.sl.sortingandsearching; public class TowersOfHanoi { //记录汉诺塔总共多少张圆盘 private int totalDisks; public TowersOfHanoi(int disks){ totalDisks = disks; } public void slove(){ moveTower(totalDisks, 1, 3, 2); } private void moveTower(int numDisks, int start, int end, int temp){ if(numDisks == 1){ moveOneDisk(start, end); }else{ moveTower(numDisks - 1, start, temp, end); moveOneDisk(start, end); moveTower(numDisks - 1, temp, end, start); } } private void moveOneDisk(int start, int end){ System.out.println("移动一张盘子,从 "+start+" 到"+end); } }
测试类:
package xidian.sl.sortingandsearching; public class SolveTowers { /** * @param args */ public static void main(String[] args) { TowersOfHanoi towers = new TowersOfHanoi(4); towers.slove(); } }
相关文章推荐
- 16、数据结构笔记之十六栈的应用之栈与递归之汉诺塔问题
- 2.1 linux文件系统应用实例:递归遍历目录
- 计算机算法之快速排序、原址排序、递归的最好应用
- c印记(六): 数组与递归联合应用的小游戏
- 栈的应用举例--递归
- CTE递归应用,树状结构,查询所有子部门、子部门数量、按层级显示部门名称
- 递归应用---猴子吃桃
- 算法之递归(4)- 应用
- Java排序查找算法――二分法与递归的应用实例
- 递归的应用及理解
- 题目1044:Pre-Post(递归的 4000 经典应用)
- (三)卷积递归深度学习在3D物体分类中的应用(译文)
- 第45课 递归的思想与应用(下)
- 算法系列之十五:循环和递归在算法中的应用
- 数据结构学习笔记(11.递归的应用之常用递归算法)
- C# 递归的应用 TreeView递归绑定数据
- 数据结构之栈与递归的实现及应用(斐波拉契数列递归解法和strlen递归解法)
- MVC新应用 递归的结构(2)
- C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)
- ACM_1088滑雪(递归的简单应用)