首页 > 其他分享 >汉诺塔问题自己的理解

汉诺塔问题自己的理解

时间:2024-11-16 20:19:55浏览次数:3  
标签:count char 递归 int hanno move 问题 理解 汉诺塔

#include<stdio.h>

void move(char A,char B)
{
    int static count = 1;      这个是拿来计算移动次数的
    printf("%d ",count);
    printf("%c-->%c\n",A,B);
    count++;
}


void hanno(int n,char A,char B,char C)
{
    if(n == 1)    
    {
        move(A,C);
    }
    else
    {
        hanno(n-1,A,C,B);    我在这里出现过问题:A,B,C的顺序弄乱了
        move(A,C);               我是这样理解的:将整个汉诺塔整体看成两部分,最下面的一个和剩下的 
        hanno(n-1,B,A,C);            部分,然后问题就转变为两个物块的情况,我们是这样处理的:将
    }                                            (n-1)个移动到B上,再将第n个移动到C上,最后将这(n-1)个
}                                                 移动到C上;(我觉得这很好地体现了递归将大化小的思想)两个

                                                  hanno函数的作用可以概括为“将(n-1)个由A到B借助C,再由B

int main()                                    到C借助A“,中间的move可以理解为”将A上剩下的(最大的)移
{                                                动到C”,处处体现着递归,只能说不愧是递归的代表习题。
    int n = 0;                         编者水平有限,欢迎大家提出意见,大家一起进步。
    scanf("%d",&n);
    hanno(n,'A','B','C');
    return 0;
}

标签:count,char,递归,int,hanno,move,问题,理解,汉诺塔
From: https://blog.csdn.net/weixin_68517776/article/details/143822199

相关文章

  • 轻松理解操作系统 - Linux文件系统模块完结!又可以快速了解原理了
    在前面的7期中,我们了解了Linux文件系统的模块和它们相互之间是如何配合并形成一个完整的、可以将所有的所有都抽象成文件的体系。这样的体系主要是为了帮助大家在使用或编程的时候更加的简化,从而更简单的使用以及提升效率。本篇文章则提升深入理解Linux文件系统的效率,......
  • 轻松理解操作系统 - 图文:Linux内核虚拟内存的基石是什么?
    第一大模块:一文串联文件系统模块上期文章中,我们了解了 Linux内存管理模块 的其中一大功能:内核虚拟内存管理。内核的虚拟内存是怎么管理的?内核虚拟内存的管理是用户程序创建进程和执行各种任务的基础。没有它,我们就无法正常使用系统。但,虚拟内存终究是要落到物理内存里面的......
  • springboot3整合mybatisplus问题Invalid value type for attribute 'factoryBeanObjec
    版本说明:JDK版本:17springboot版本:3.3.5问题分析:springboot版本与mybatisplus版本不兼容解决办法:将mybatisplus版本替换为以下版本<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>......
  • 【C++】深入理解自定义 list 容器中的 list_iterator:迭代器实现详解
    个人主页:起名字真南的CSDN博客个人专栏:【数据结构初阶】......
  • 几个有意思的多线程问题 & 有趣现象笔记
    信号量释放的时候线程被带入的问题SemaphoreSlim和多线程使用的时候,.Release()时,应该在新的线程去做Release操作同理,因为Release时会切换到await等待的代码执行,也就是调用SemaphoreSlim.Release的线程被带入到了awaitSemaphoreSlim.WaitAsync()的代码执行,如果是一个......
  • AI|经常崩溃的问题解决
    AdobeIllustratorCrashes网络上大部分说法都是重装AI,兼容性问题,管理员权限或者是版本不对,经测试均无效,甚至出现重装系统这种离谱的办法,正确的解决办法是把首选项的性能里的GPU取消勾选,或者再把电脑的虚拟内存扩大即可。 Step1:打开首选项 Step2:取消勾选GPU性能......
  • 深入理解Jackson的@JsonCreator注解
    在Java的JSON处理库中,Jackson无疑是最流行的选择之一。它提供了强大的数据绑定功能,允许开发者轻松地在Java对象和JSON数据之间进行转换。在处理不可变对象或者需要自定义反序列化逻辑时,@JsonCreator注解显得尤为重要。本文将通过实例深入探讨@JsonCreator注解的使用,包括其在......
  • 探索大型语言模型(LLMs)能否在不泄露私人信息的情况下联合其他大型语言模型共同解决问题
    概述谷歌的GeminiUltra(2023年)和OpenAI的GPT-4(2023年)等大规模语言模型在许多任务中都表现出了令人印象深刻的性能。然而,这些模型不仅推理成本高昂,而且运行于数据中心,而数据中心并非本地环境,无法获得私人数据。另一方面,可以在私人环境中运行的模型,如GeminiNano,可以......
  • 字节青训营 相邻字母匹配计数问题
    问题描述小F有一个由大写字母和小写字母组成的字符串。她想知道,在忽略字母大小写的情况下,有多少对相邻的字母是相等的。例如,对于字符串 "aABbbC",在忽略大小写的情况下,有3对相邻字母是相等的,分别是 "aA","AB" 和 "bb"。测试样例样例1:输入:s="aABbbC"输出:3样例2:......
  • 未使用 `deleteLater` 而直接使用 `delete` 导致问题
    以下是一个完整的Qt代码示例,展示了未使用deleteLater而直接使用delete导致问题的情况,该示例涉及到一个简单的多线程场景,主线程创建一个工作线程,工作线程完成任务后通知主线程,在对象删除处理不当的情况下会出现崩溃等问题。示例代码#include<QObject>#include<QThread>#i......