数据结构与算法(七)

来源:互联网 发布:妍霓丝黄金水知乎 编辑:程序博客网 时间:2024/06/07 02:18

递归的高级应用


1. 汉诺塔的问题

所有的盘子刚开始都放在塔座A上,要求将所有的盘子从塔座A移动到塔座C上,每次只能移动一个盘子,任何盘子不能放在比自己小的盘子上。


2. 移动子树

例:起始五个盘子在A,中间为B,需要移到C;可以首先将上边四个移动到B,则A就剩一个,只需一步A→C;问题变为起始四个盘子在B,中间为A,需要移动到C;可以先考虑把上边三个盘子移动到A,则B就剩一个,只需一步B→C;问题变为起始三个盘子在A,中间为B,需要移动到C。。。最终一个盘子在A,中间为B,需要移动到C,只需一步A→C。


3. 递归解决


汉诺塔递归

public class HanoiTower {/* * 移动盘子 * topN:移动的盘子数 * from:起始塔座 * inter:中间塔座 * to:目标塔座 */public static void doTower(int topN,char from,char inter,char to){if(topN==1){System.out.println("盘子1,从"+from+"塔座到"+to+"塔座");}else{doTower(topN-1,from,to,inter);System.out.println("盘子"+topN+",从"+from+"塔座到"+to+"塔座");doTower(topN-1,inter,from,to);}}}

测试:

public class TestHanoiTower {public static void main(String[] args) {// TODO Auto-generated method stubHanoiTower.doTower(3, 'A', 'B', 'C');}}


0 0
原创粉丝点击