首页 > 其他分享 >汉诺塔递归实现

汉诺塔递归实现

时间:2025-01-11 18:30:03浏览次数:3  
标签:一堆 String 递归 实现 汉诺塔 hanIo 搞懂

汉诺塔其实没有那么难,关键是搞懂递归是啥。把递归搞懂汉诺塔就简单了。看之前先把题目搞懂,之前我走弯路了,可以在b站上找视频再结合这个感悟,大多数UP没有提到以下感悟。

最后付代码。

需要重点理解的是递归的大化小,但每次小递归都需要完成任务,找到通式。重点搞懂递归是干哈的。

找到每次递归完成的方法,注意n=1时特殊情况

1.首先把第n个上n-1的一堆放在辅助柱b上

2.然后把第n个放在目标柱c上

3.再把刚放在辅助柱子b上的一堆放在目标柱c上

这样就找到了n个盘子的递归通式,即完成一次递归的方法,每一次所有盘子都重新移到了目标柱子c。

把n个盘子一堆分成第n个和n-1的一堆,然后把第n-1的一堆分成第n-1个和n-2的一堆,以此类推直到递归出口n=1.

f8a92446b4dc4596932da432c0f0a604.png

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: ${USER}
 * Date: ${YEAR}-${MONTH}-${DAY}
 * Time: ${TIME}
 */
public class Main {
    static void move(String pos1,String pos2){
        System.out.println(pos1 + "->" + pos2);
    }
    static void hanIo(int n,String a,String b,String c) {
        if( n == 1){
            move(a,c);
            return ;
        }else {
        hanIo(n - 1,a,c,b);
        move(a,c);
        hanIo(n - 1,b,a,c);}
    }
    public static void main(String[] args) {
        System.out.println("请输入圆盘个数");
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        hanIo(n,"A","B","C");
    }
}

 

 

 

标签:一堆,String,递归,实现,汉诺塔,hanIo,搞懂
From: https://blog.csdn.net/startshining_ys/article/details/145051103

相关文章

  • 使用 AssemblyAI 实现高效的语音转文本处理
    在语音处理领域,AssemblyAI提供了一套强大的AI模型,用于处理语音到文本的转录、说话者分离、语音摘要等任务。本文将深入解析AssemblyAI的核心组件以及如何使用其提供的工具高效地实现语音转录功能。技术背景介绍AssemblyAI专注于构建语音AI模型,这些模型可以用于将......
  • Java基于SpringBoot+Vue的口腔诊所系统的设计与实现(源码+文档+运行视频+讲解视频)
    所需该项目可以在最下面查看联系方式,为防止迷路可以收藏文章,以防后期找不到项目介绍Java基于SpringBoot+Vue的口腔诊所系统的设计与实现(源码+文档+运行视频+讲解视频)系统实现截图技术栈介绍JDK版本:jdk1.8+编程语言:java框架支持:springboot数据库:my......
  • 使用 MongoDB 和 OpenAI 实现 RAG 的实战指南
    在本篇文章中,我们将深入探讨如何使用MongoDB和OpenAI实现检索增强生成(RAG,Retrieve-AugmentedGeneration)。通过结合数据库的高效检索能力和语言模型的生成能力,可以创建出功能强大的应用。接下来,我们将详细介绍如何搭建这样的系统,并提供可运行的代码示例。技术背景介绍......
  • unity下零GC反射实现思路
    C#反射GC怎么产生的?C#的反射API确实在某些情况下会导致频繁的垃圾回收(GC),尤其是在使用MethodInfo.Invoke等方法时。反射API的设计使得值类型在传递时需要进行装箱(boxing),这会导致额外的内存分配,从而增加GC的压力。反射导致GC的原因装箱和拆箱:当值类型(如int、......
  • 【DNS攻防】深入探讨DNS数据包注入与DNS中毒攻击检测 (C/C++代码实现)
    DNS数据包注入和DNS中毒攻击是网络安全领域中的两个重要主题。DNS(域名系统)是互联网中的一项核心服务,负责将域名转换为与之相对应的IP地址。DNS数据包注入是指攻击者通过篡改或伪造DNS请求或响应数据包来干扰或破坏DNS服务的过程。攻击者可通过注入恶意数据包来改变DNS解析结果,将......
  • C#实现 Winform 程序在系统托盘显示图标及开机自启动
    目录添加控件(拖拽方式)设置控件添加主窗体事件实现双击托盘打开主程序代码方式添加系统开机自启动应用程序实现步骤创建NotifyIcon控件并设置属性;编写NotifyIcon响应控制事件;在主窗体的Load事件中将NotifyIcon添加到系统托盘;程序退出时,移除系统托盘的NotifyIcon;No......
  • YOLO实现火焰检测
    完整源码项目包获取→点击文章末尾名片!Yolov3的Pytorch版本实现火焰检测,其具体效果如下:Requirements环境:windows10编程语言:python编程工具:pycharm所需的包:requirements.txtTrain1.安装包本次所需的包在requirements.txt中,通过pipinstall-rrequirements.txt......
  • 基于SpringBoot+Vue实现的家政服务平台【源码+文档+部署讲解】
    目 录目 录1绪论1.1 研究背景1.2目的和意义1.3论文结构安排2 相关技术2.1B/S结构介绍2.2 MySQL数据库介绍2.3SpringBoot框架介绍3系统分析3.1 系统可行性分析3.1.1技术可行性分析3.1.2经济可行性分析3.1.3运行可行性分析3.2 系......
  • tk矩阵系统,可实现抓取,强私,截流
    TK云控来袭!让你的TikTok营销如虎添翼......
  • SpringBoot基于java的畅销图书推荐系统的设计与实现
    1.引言在当今的软件开发领域,企业级应用的开发和部署速度直接影响着业务的竞争力。SpringBoot以其轻量级、快速启动和强大的集成能力,成为构建现代企业级应用的首选框架。本文将带您深入了解SpringBoot框架的核心特性,并展示如何利用它构建一个高效、可扩展的系统。2.开发......