Java眼中的汉诺塔问题【递归】

目录

学习路线

📖汉诺塔简介

物联网

🙈汉诺塔问题

locket

💡问题分析

python技能树

1️⃣1个盘子

vendor.js过大

2️⃣2个盘子

rk3568

3️⃣3个盘子

分布式计算

 👉总结

ViT

📝代码实现【java】

高德定位


centos

📖汉诺塔简介

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

劳斯判据

高并发

🙈汉诺塔问题

现在有三根柱子,分别为A、B、C,现在在A柱子上有64个盘子,大小不一样,大盘子在下边,小盘子在上边。现在需要把64个盘子挪到C柱子上,请问怎样挪动,需要多少次才能完成?

ARM编译工具链

💡问题分析

1️⃣1个盘子

首先我们不去考虑64个盘子,我们来看一个盘子的情况

USART

链游脚本

➡️直接挪(A——>C)只需要1次(2^1-1):

YYModel的结构分析

transformer

2️⃣2个盘子

实例分割

 ➡️A——>C       A——->B        B——–>C     只需要3次(2^2-1)

性能优化

安卓开发

3️⃣3个盘子

Solidity

  ➡️A——>C       A——->B        C——–>B      A——>C       B——->A        B——–>C      A——–>C     只需要7次(2^3-1)

ide

强化学习

Linux 下,一切皆文件

物体检测

 👉总结

当有64个盘子时,需要挪动2^64-1,这是一个庞大的数字,这时候就需要我们使用计算机程序来实现这个数字。

当有n个盘子,现在想办法的是,把n-1个盘子放在B上,把第n个盘子放在C上,最后把n-1个盘子放在C上。

📝代码实现【java】

    //汉诺塔

    //一个盘子  A---->C    1
    //两个盘子  A---->B  A----->C   B---->C     3
    //三个盘子  A---->C  A----->B   C----->B      7     2^N - 1
    //64   2^64-1

    /*
     *
     * @param n
     * @param pos1   起始位置
     * @param pos2   中转位置
     * @param pos3   目的位置
     */

    public static void Hanoi(int n, char pos1, char pos2, char pos3) {
        if(n == 1) {
            move(pos1, pos3);
            return;
        }
        Hanoi(n-1, pos1, pos3, pos2);//n-1个盘子从pos1借助pos3移动到pos2中:pos1----->pos3
        move(pos1, pos3);//第n个盘子从挪到pos3中
        Hanoi(n-1, pos2, pos1, pos3);//n-1个盘子从pos2借助pos1到pos3中
    }

    public static void move(char pos1, char pos2) {
        System.out.print(pos1 + "->" + pos2 + " ");
    }

    public static void main(String[] args) {
        Hanoi(1,'A', 'B', 'C');
        System.out.println();
        Hanoi(2,'A', 'B', 'C');
        System.out.println();
        Hanoi(3,'A', 'B', 'C');

    }

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注