汉诺塔
汉诺塔问题算法
代码实现
这里的关键在于对三个关键步骤的代码实现。
public class Hanoilmpl { public void hanoi(int n, char A, char B, char C) { if (n == 1) { move(A, C); } else { hanoi(n - 1, A, C, B);//步骤1 按ACB数序执行N-1的汉诺塔移动 move(A, C); //步骤2 执行最大盘子移动 hanoi(n - 1, B, A, C);//步骤3 按BAC数序执行N-1的汉诺塔移动 } } private void move(char A, char C) {
//执行最大盘子的从A-C的移动 System.out.println("move:" + A + "--->" + C); } public static void main(String[] args) { Hanoilmpl hanoi = new Hanoilmpl(); System.out.println("移动汉诺塔的步骤:"); hanoi.hanoi(3, 'a', 'b', 'c'); } }
关于递归的四条基本法则
1.基准情形。必须有某些基准情形,它无需递归就能解出。
2.不断推进。对于那些需要递归求解的情形,每一次递归调用都必须要使求解的状况朝接近基准情形的方向推进。
3.设计法则。假设所有的递归调用都能运行。
4.合成效益法则。在求解同一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作
——-摘自《数据结构与算法分析(机械工业出版社 Mark Allen Weiss著)》
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223375.html原文链接:https://javaforall.net
