目录

1. 题目描述

2. 题目目标

3. 题目分析


1. 题目描述

在一块铜板装置上,有三根杆(编号A、B、C),在A杆自上而下、由大到下按顺序放置n个盘子。

2. 题目目标

把A杆上的盘子全部转移到C杆上,并且保持原有的顺序叠好。每次只能移动一个盘子,并且在移动中三根杆子上始终保持大盘在下,小盘在上,操作过程中盘子可以放置于A、B、C任一杆上。

3. 题目分析

对于一个新的问题摆在我们的面前,我们往往会利用最简单的方式来思考并且尝试深入理解它的原理,所以我们就从最简单的模型看起。

我将演示当n分别等于2和3(n=1情况很简单就不讲解了喔!)时的情况,下面是我自己画的图解:

n=2:

n=3:

通过这两个图解,我们可以总结出无论n增加到多少,其实本质上B杆始终扮演这中转站的角色。那么我们可以这样理解: A杆:起始位置  B杆:中转位置吗  C杆:目标终点位置

汉诺塔问题中的递归思想

面对这样的问题,数值较小的时候使用枚举法当然有用,但是无休止的穷举就是繁琐的、没有意义的。那么我们如何结合递归的大事化小的思维方式呢?

其实我们不难发现当我们有n个盘子的时候,我们只需要将n-1个盘子从A杆(起始位置)转移到B杆(中转位置), 再把最大的盘子从A杆(起始位置)转移到C杆(目标终点位置),

这个时候只剩下将n-1个盘子从B杆(中转位置)转移到C杆(目标终点位置)。这样的解决问题的方式实际上将原问题转化为解决移动n-1、n-2........3、2,直到移动到最后最小的盘子。

这样有繁化简的方法就是递归。

有了这样更加深层的理解,我们就来看看代码的实现:

//汉诺塔问题递归实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void move(char pos1, char pos2)//实现盘子的移动步骤的打印
{printf("%c->%c ", pos1, pos2);
}
void Hanoi(int n, char pos1, char pos2, char pos3)
{if (n == 1){move(pos1, pos2);}else{Hanoi(n - 1, pos1, pos3, pos2);//将n-1个盘子从A杆(起始位置)转移到B杆(中转位置)move(pos1, pos3);//把最大的盘子从A杆(起始位置)转移到C杆(目标终点位置)Hanoi(n - 1, pos2, pos1, pos3);//此时对于n-1个盘子B杆变成起始位置,A杆为中转位置,转移到C杆(目标终点位置)}
}
int main()
{int n = 0;printf("请输入盘子个数:");scanf("%d", &n);Hanoi(n, 'A', 'B', 'C');return 0;
}

这样当我们输入一个值例如n=3的时候,就会产生如何移动的结果:

这样问题就解决了!!!

今天分享就到这里,希望大家一起提高!

汉诺塔(河内塔)问题解析(函数递归经典问题)相关推荐

  1. 汉诺塔//河内塔(Tower of Hanoi)

    #汉诺塔//河内塔(Tower of Hanoi) #include<#iostream> using namespace std; static int index = 0; void ...

  2. 2016年圣诞节巨献:C#汉诺塔河内塔游戏(动画、圣诞节音效)源码及安装包

    终于把VS的的打包搞定了,高兴啊! 圣诞节巨献:C#汉诺塔河内塔游戏(动画效果.圣诞节音效).在平庸而又乏味的生活中,来一把紧张而刺激的汉诺塔游戏,生活,就是这么美好.游戏代码可以在博主的资源页下载! ...

  3. 汉诺塔(河内塔)问题(递归)

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

  4. C语言函数递归—经典递归问题

    目录 一.什么是递归? 二. 汉诺塔问题 2.1 认识什么是汉诺塔 2.2 汉诺塔打印步数 2.3 汉诺塔打印步骤 三.青蛙跳台阶问题 一.什么是递归? 这里我们先简单的认识一下什么是函数递归:我们可 ...

  5. python递归面试题_汉诺塔问题其实很简单 Python 递归经典面试题

    话不多说,上代码 1 def hanoi_move(n, source, dest, intermediate): 2 if n >= 1: # 递归出口,只剩一个盘子 3 hanoi_move ...

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

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

  7. 【码蹄集】四柱河内塔

    题目:四柱河内塔 河内塔问题: 有三个柱子,编号为1,2,3;在编号为1的柱子上有n个大小不同圆盘,圆盘从小到大,从上到下堆叠,你只可以移动-个柱子上最上面的圆盘. 现在你需要将编号为1的柱子上的圆盘 ...

  8. 入门C语言第二话:函数(上)之锻体篇,带你玩转函数(内有汉诺塔,青蛙跳台阶等经典问题,建议收藏和分享)

    文章目录 前言 概念的引入 大纲 一.函数的定义 二.函数的分类 1.库函数 概念引入 库函数的分类 了解五步骤 例1: 1.介绍printf 2.头文件 3.所传参数及其类型 4.返回类型及其返回值 ...

  9. “三色河内塔”算法(三色汉诺塔)

    问题引入 "三色河内塔"由"河内之塔"的规则衍生而来(点击查看),区别在于三色河内塔的目的是将图1所示的圆盘位置,移动成为图2所示的圆盘位置."三色河 ...

最新文章

  1. 2020年春季学期信号与系统课程作业参考答案-第十四次作业
  2. 《双人成行》如何炼就“教科书级别的合作体验游戏”典范?
  3. django_form表单的提交
  4. 关于RMQ问题的四种解法
  5. PHP-Redis扩展安装 error: ext/standard/php_smart_str.h: No such file or directory
  6. 第三方软件要使用QQ邮箱进行发邮件相关设置
  7. 第7章 输入/输出系统
  8. 【电路补习笔记】4、二极管的参数与选型
  9. 《飞鸽传书2007绿色版下载》总结报告
  10. 美国热搜 “1个字形容2020年”:IBM 的代码回复太太太亮了!
  11. 虚拟机安装 xp步骤(参照百度文库)
  12. strcmp可以比较数组么_数组:总结篇
  13. 记录——《C Primer Plus (第五版)》第十一章编程练习第二题
  14. node 更新_ESLint v7.0.0 发布:不再支持 Node.js v8
  15. thymeleaf教程
  16. AOAPC I: Beginning Algorithm Contests 题解
  17. 茴香豆的“茴”有几种写法?单例模式你知道有几种写法?
  18. Samtools说明文档网址变更
  19. ebyte Lora 转 4G 透传通讯测试
  20. 小学C++编程入门书籍及相关资料介绍(一)

热门文章

  1. 安卓最新版本_腾讯手机管家下载最新版本-腾讯手机管家2020新版本下载v8.8.1 安卓官方版...
  2. 202011 网络是通的,数据发不过去(接受不到)
  3. Systemverilog中的logic和bit
  4. 作UML图的软件有哪些
  5. 用pytorch官网命令 安装pytorch1.10.1+CUDA11.1报错
  6. [地图]构建欧氏距离场
  7. 构造器(也称构造方法)
  8. 为整数线性规划(integer linear programming,ILP)
  9. ch19.PDO。p360---练习三。通过pdo更新数据
  10. 暑期实训二20220621