汉诺塔问题--递归求解

简介: 汉诺塔问题

题目

有三个柱子,第一个柱子上从下往上放置大小递减的圆盘,要把这些圆盘都移动到第三个柱子上去,但是==大的圆盘不能放在小的圆盘上面==,可借助中间柱子的帮助解决。

分析

A,B,C代指三个柱子,要把A上的全部移动到C去。
假设第一个柱子上有n个圆盘,那就要把第一个柱子上n-1个圆盘都移走,才能拿到最后一个并把其放到第三个柱子上。但是这么想还是不懂,==假设n=1,那就直接A移动到C上去,==,假设n=2,先移动一个到中间柱子上,又会演变成n=1的情况,n=1可以作为递归跳出的条件,其他的就往这个地方递归。

==先从小问题上入手,在推广到大问题上去==

代码

package com.bilibili;

import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/7 15:19
 */
public class Main {
   

    public static void main(String[] args) {
   

        hanoi('A','B','C',4);

    }

    /**
     * 汉诺塔问题,将N片圆盘从A移动到C
     * 柱子角色不断互换
     */


    public static void hanoi(char a,char b,char c,int n){
   
        if (n == 1) {
   
            System.out.println(a + "---->" + c);
        } else {
   
            //c作为中间载体,先把压在a上的n-1圆盘移除
            hanoi(a, c, b, n -1);

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

            //现在把原来放在b上的n-1片放回到c去,通过a的帮助,
            hanoi(b, a, c, n -1);
        }
    }
}
目录
相关文章
|
12月前
|
JavaScript 前端开发
JS浮点数精度问题及高精度小数运算:BigNumber解决方案
JS浮点数精度问题及高精度小数运算:BigNumber解决方案
1186 0
|
运维 监控 Cloud Native
设计与构建 FinOps 流程、团队、体系与目标
企业 FinOps 实施不是一蹴而就的项目,如果您正在推进企业云原生 FinOps 落地,除了选择合适的技术手段,企业内部的流程和体系建设也尤为重要。
164473 110
|
11月前
|
存储 人工智能 弹性计算
国内首个,阿里云入选Gartner®战略云平台魔力象限挑战者
近日,Gartner发布2024年《战略云平台魔力象限》(Magic Quadrant™ for Strategic Cloud Platform Services)报告,阿里云从利基者象限进入挑战者象限,成为国内首个入选该象限的中国公共云厂商。
|
弹性计算 运维 数据安全/隐私保护
|
编解码 开发工具 C#
Windows电脑如何启动RTSP服务实现本地摄像头数据共享
本文介绍如何利用大牛直播SDK中的轻量级RTSP服务,在Windows平台上轻松采集摄像头数据并生成本地RTSP流。通过SDK提供的SmartPublisherDemo工具,用户能简便地选择摄像头、配置分辨率与帧率,并启动RTSP服务。此外,还支持音频采集、多端口服务以及动态水印等功能。生成的RTSP URL可用于其他终端拉流播放,无需额外部署服务器。该服务适配多种应用场景,如安防监控、电子教室等,并兼容Windows 7及以上版本。对于希望集成此功能的开发者,SDK提供了C++及C#接口,并支持多种编译模式。
709 0
|
安全 关系型数据库 MySQL
凡事留一手,MySQL配置读写分离
凡事留一手,MySQL配置读写分离
凡事留一手,MySQL配置读写分离
|
人工智能 算法 机器人
迷宫问题(C语言实现)(牛客网百度笔试真题)
迷宫问题(C语言实现)(牛客网百度笔试真题)
556 0
|
数据可视化 算法 C++
C++ cmake工程引入qt6和Quick 教程
C++ cmake工程引入qt6和Quick 教程
938 0
|
SQL 算法 Java
若依框架---更新删除注意点
若依框架---更新删除注意点
615 0