1、概述:汉诺塔这个问题相信是很多初入递归的同学们都遇到的一个稍微有一些入门难度的问题。在这里贴出代码简单解析一下,这个问题只要想通了就知道递归解法非常好做,想不通就比较纠结,多想想还是可以的!
2、代码段
package com.algorithm;/** * Created by yuanfeng on 2019/7/16 13:05 */ import java.util.Scanner; /** *@ClassName Hanoi *@Description T0D0 *@Author yuanfeng *@Date 2019/7/16 13:05 *@Version 1.0 **/ public class Hanoi { public static void move(int n,char A,char B,char C){ if(n == 1){ System.out.println(A+"--->"+C);//如果只有一个盘 }else{ move(n-1,A,C,B);//把A上面n-1个盘借助C移动到B System.out.println(A+"--->"+C);//第n个盘子直接到C上面 move(n-1,B,A,C);//将n-1个盘子从B借助A到C上面 } } public static void main(String[] args) { char A = 'A'; char B = 'B'; char C = 'C'; System.out.println("请输入多少个n:"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); move(n,A,B,C); } }
解析:该问题就要去思考的一个点就是把上面的n-1个盘当做一个整体,然后分而治之,不断的递归调用进行解决,首先我们看到分两种情况考虑,第一只有一个盘子的时候,那个时候直接从A柱子移动到C柱子即可。不需要解决其他柱子来解决。第二当盘子个数大于1的时候首先考虑上面的n-1个盘子借助B从A移动到C,第n个盘子直接从A移动到C。再把B柱子上面的n-1个盘子借助A移动到C。这次懂了吧。。。。