public static void main(String[] args) {

    // TODO Auto-generated method stub

    Hanoi h = new Hanoi();

    char a = 'A';

    char b = 'B';

    char c = 'C';

    int count = h.hanoi(3, a, b, c);

    System.out.println(count);

}

/**

 * 汉诺塔问题

 * @param n 阶数

 * @param a 起始柱

 * @param b 中转柱

 * @param c 目标柱

 * @return 移动次数

 * */

public int hanoi(int n,char a,char b,char c) {

    if (n == 1) {

        move(a, c);

    } else {

        hanoi(n-1, a, c, b);

        move(a, c);

        hanoi(n-1, b, a, c);

    }

    //汉诺塔的移动次数为(2**n)-1

    return (int) Math.pow(2, n)-1;

}

public void move(char a,char b) {

    System.out.println(a + "--->" + "b");

}

}


Python求解汉诺塔

i = 1 # 定义全局变量记录次数

def move(n, a, c):

global i

print("第{}步:将编号为{}的盘子从{}--->{}".format(i, n, a, c))

i += 1

def hanoi(n,a,b,c):

#a,b,c分别是三根柱子,n为套在a柱上的圆圈个数

if n == 1:

    move(n, a, c)

else:

知其然不知其所以然,大厂常问面试技术如何复习?

1、热门面试题及答案大全

面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

手撕“汉诺塔算法(1),Java技术篇

2、多线程、高并发、缓存入门到实战项目pdf书籍

手撕“汉诺塔算法(1),Java技术篇

手撕“汉诺塔算法(1),Java技术篇

手撕“汉诺塔算法(1),Java技术篇

3、文中提到面试题答案整理

手撕“汉诺塔算法(1),Java技术篇

4、Java核心知识面试宝典

覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入

手撕“汉诺塔算法(1),Java技术篇

手撕“汉诺塔算法(1),Java技术篇

手撕“汉诺塔算法(1),Java技术篇