C++汉诺塔问题(河内塔)

article/2025/9/7 15:53:59

C++汉诺塔问题(河内塔)

这是一个非常经典的递归问题。

递归:在函数内部又再次调用函数自身的问题

假设有n个盘子,需要把这些盘子从第一根起始柱A移动到第三根目标柱C中。

1、首先需要把n-1个盘子移动到第二根中转柱B上;

2、再把最后一个也就是最大的那一个盘子移动到第三根目标柱C上;

3、最后再把剩下的n-1个盘子移动到第三根目标柱C上。

我们定义f ( n ) f(n)f(n)是需要移动的次数;

f ( 1 ) = 1 , f ( 2 ) = 3 , f ( 3 ) = 7 f(1) = 1,f(2) = 3,f(3) = 7f(1)=1,f(2)=3,f(3)=7

f ( n ) = 2 f ( n 1 ) + 1 f(n) = 2f(n-1)+1f(n)=2f(n1)+1

#include<iostream>

#include<stdio.h>

using namespace std;

void move(int n, char pos1, char pos3)

{

    //打印移动的过程

    // 1代表上面最小的盘子

    // 2代表中间位置的盘子

    // 3代表下面最大的盘子

    cout << "盘子" << n << "从" << pos1 << "移动到" << pos3<<endl;

}

void Hanoi(int n, char pos1, char pos2, char pos3)

{

    //如果是1个盘子,直接从起始柱A移动到目标柱C

    if (n == 1)

    {

        move(n, pos1, pos3);

    }

    else

    {

        //如果盘子大于1个,需要把n-1个盘子,从起始柱pos1,通过目标柱pos3,移动到中转柱pos2

        Hanoi(n - 1, pos1, pos3, pos2);

        //此时pos1上的n-1个盘子全部移动pos2上去了,那么可以直接把pos1上剩下的1个盘子,直接移动到pos3上

        move(n, pos1, pos3);

        //把pos2剩下的n-1个盘子,通过中转位置pos1,移动到目标位置pos3

        Hanoi(n - 1, pos2, pos1, pos3);

    }

}

int main()

{

    //盘子个数

    int n = 5;

    //起始柱A

    char pos1 = 'A';

    //中转柱B

    char pos2 = 'B';

    //目标柱C

    char pos3 = 'C';

    cout << "移动盘子的顺序如下" << "这里有" << n << "个盘子:" << endl;

    //汉诺塔函数

    Hanoi(n, pos1, pos2, pos3);

    return 0;

}

 


http://chatgpt.dhexx.cn/article/pbqyELi6.shtml

相关文章

关于Python实现汉诺塔问题

发文声明:在刚接触汉诺塔搬盘子这个问题时候&#xff0c;我是很懵的&#xff0c;当时也没多想&#xff0c;后来复习的时候才深入的去剖析了一下&#xff0c;对于我这种小白来讲还是不太容易的&#xff0c;因此我写下这篇博客&#xff0c;来分享一下自己的学习思路和心得&#x…

【C语言刷题】汉诺塔问题

目录 1.汉诺塔简介 2.汉诺塔分析 &#xff08;1&#xff09;寻找规律&#xff08;采用物理中的参考系来进行推论&#xff09; ①当n1时 ②当n2时 ③当n3时 插曲&#xff1a;很多讲解汉诺塔博客&#xff0c;视频&#xff0c;很不严谨的地方&#xff0c;让初学者听不懂&am…

【算法篇】汉诺塔问题

汉诺塔问题是一个递归的经典范例。 让我们先从移动一个盘开始&#xff0c;逐渐增加需要移动的盘数。 当我们需要移动一个盘时&#xff0c;只需将该盘移动至C杆。 int c 0; void move(char a, char b) {printf("第%d步为&#xff1a;%c->%c\n",c, a, b); } 当…

C语言实现汉诺塔问题(保姆式讲解)

前言: 大家好&#xff0c;又是再一次分享文章&#xff0c;我十分感谢各位能够点开这篇花费我颇多时间才解决的汉诺塔问题&#xff0c;接下来我就要分享一下自己的所思所想&#xff0c;希望能给各位带来一些不一样的收获吧。 提醒: 汉诺塔问题的本质是函数递归&#xff0c;而函数…

关于汉诺塔问题

首先&#xff0c;我们要了解什么是汉诺塔问题。 汉诺塔问题源于古印度的一种游戏&#xff0c;而这种游戏是指在一块铜板装置上&#xff0c;有三根杆(编号A、B、C)&#xff0c;在A杆自下而上、由大到小按顺序放置64个金盘。而我们游戏的目标则是&#xff1a;把A杆上的金盘全部移…

【C语言】汉诺塔问题的解决办法(附图)

1.游戏规则 汉诺塔(Hanoi)游戏是在一块铜板装置上&#xff0c;有三根杆(编号A、B、C)&#xff0c;在A杆自下而上、由大到小按顺序放置64个盘子。游戏的目标&#xff1a;把A杆上的盘子全部移到C杆上&#xff0c;并仍保持原有顺序叠好。操作规则&#xff1a;每次只能移动一个盘子…

Python解决汉诺塔问题

问题引入 汉诺塔问题源于印度一个古老传说。相传大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定&#xff0c;任何时候&#xff0c;在小…

汉诺塔问题(C语言实现)

前言 一、汉诺塔圆盘的移动步数 二、汉诺塔圆盘移动步骤 总结 前言 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序…

Java|汉诺塔问题详解

文章目录 汉诺塔问题&#xff1a;编程要求&#xff1a;解题过程&#xff1a;代码实现&#xff1a;总结 汉诺塔问题&#xff1a; 相传在古印度圣庙中&#xff0c;有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上&#xff0c;有三根杆(编号A、B、C)&#xff0c;在A杆…

C++解决汉诺塔问题

Description 汉诺塔&#xff08;又称河内塔&#xff09;问题是印度的一个古老的传说。开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒A、B和C&#xff0c;A上面套着 n n n个圆的金片&#xff0c;最大的一个在底下&#xff0c;其余一个比一个小&#xff0c;依次叠上去&…

汉诺塔问题超级详解

汉诺塔 汉诺塔问题图解代码 汉诺塔问题 1&#xff0c;我们为了后期方便讲解首先进行一个简单的命名—— 起始柱&#xff1a;1&#xff1b; 过度柱&#xff1a; 2&#xff1b; 目标住&#xff1a;3&#xff1b; 2&#xff0c;由于汉诺塔问题是一个明显的递归问题&#xff0c;所以…

汉诺塔问题解析(C语言)

文章目录 背景一、汉诺塔和递归二、代码实现总结 背景 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄…

python实现汉诺塔问题

汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞n片黄金圆盘。大梵天命令婆罗门把圆盘从下自上开始、按大小顺序重新摆放在另一根柱子上。并且规定&#xff0c;小圆盘上不能放…

Python实现 — — 汉诺塔问题

我们今天来看一个很有意思的实例&#xff0c;叫做汉诺塔问题。 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着…

汉诺塔问题(Python实现)

前言 1.先谈一下什么是递归&#xff1f; 我自己的理解就是&#xff1a;将自身的问题不断减小规模&#xff0c;直到减小到无法减小为止。&#xff08;到达递归结束条件&#xff09;然后从小问题开始解决&#xff0c;小问题逐个解决之后&#xff0c;大问题也就迎刃而解了&#…

汉诺塔问题详解(C语言)

文章目录 前言1. 导入汉诺塔问题2. 预备知识3. 分析问题4. 编程解决问题 前言 汉诺塔问题是一个古典的数学问题&#xff0c;本文主要和大家一起用c语言解决汉诺塔问题。 1. 导入汉诺塔问题 相传在古印度圣庙中&#xff0c;有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜…

汉诺塔问题——递归算法

一、问题描述 汉诺塔问题是一个经典的问题。汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称河内塔&#xff0c;源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把…

汉诺塔问题详解

目录 一、汉诺塔问题 二、汉诺塔问题思路 三、图示化思路 1、汉诺塔一个盘子 2、汉诺塔两个盘子 3、汉诺塔三个盘子 4、想法 四、代码的实现 一、汉诺塔问题 汉诺塔问题是一个经典的问题。汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称河内塔&#xff0c;源…

c语言汉诺塔问题详解

一、前言 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按…

图解汉诺塔问题(递归求解)

汉诺塔&#xff1a;汉诺塔(Tower of Hanoi)源于印度传说中&#xff0c;大梵天创造世界时造了三根金钢石柱子&#xff0c;其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定&#xff0c;在小圆盘上不能放大圆…