前言:

汉诺塔大家都不陌生吧,在猩球崛起这个电影里,人们通过凯撒玩汉诺塔知道了它的智商增高了,这个益智小游戏的规则就是:

汉诺塔(Tower of Hanoi),又称河内塔。是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

动画演示就是这样:

对于这个小游戏,其实用到了递归的思想。

移动两层汉诺塔的步骤:

这样的话,我们推算n层汉诺塔的实现。

我们需要做的步骤便是:

用代码来演示一下:

设计函数hanoi:

hanoi(unsigned int n,char a,char b,char c);

其中n代表汉诺塔层数,用a,b,c来演示三个柱子间盘子的移动。

代码:

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>void move(char a, char b)
{printf("%c -> %c\n", a,b);           //打印盘子需要移动的方向
}void hanoti(unsigned int n,char a,char b,char c)
{if (n == 1)move(a, c);else{hanoti(n - 1, a, c, b);move(a, c);hanoti(n - 1, b, a, c);}
}int main()
{unsigned int n = 0;scanf("%d", &n);                    //输入几层汉诺塔hanoti(n,'A','B','C');return 0;
}

那演示一下3个盘子的移动验证函数正确性:

结果正确。

总结:

递归是函数解决问题的一种重要方式,掌握和熟练应用递归函数可以解决复杂问题。

C语言递归小游戏—汉诺塔(hanoi)相关推荐

  1. C语言递归思想实现汉诺塔

    目录 1.递归思想简介 2.汉诺塔问题 3.汉诺塔递归的c语言实现 1.递归思想简介 在c语言中,程序调用自身的编程技巧称为递归( recursion). 递归的定义看上去似乎很抽象,使用代码描述能够 ...

  2. 基于C语言和递归思想实现汉诺塔

    汉诺塔是源于印度一个古老传说的益智玩具. 传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱 ...

  3. python 游戏 —— 汉诺塔(Hanoita)

    python 游戏 -- 汉诺塔(Hanoita) 一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...

  4. 深度理解递归,手撕经典递归问题(汉诺塔,青蛙跳台阶),保姆级教学。

    目录 序言: 一.函数递归( recursion) 二.递归的两个必要条件 三.递归小问题 (1)接受一个整型值(无符号),按照顺序打印它的每一位 (2)编写函数不允许创建临时变量,求字符串的长度(利 ...

  5. 递归(二)-------经典递归实例(汉诺塔问题)

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇文章讨论一个经典的递归实例(Fibonacy数列问题),现在来讨论一下另外一个经典的递归例子:汉诺塔问题: 问题描述:在 ...

  6. c语言程序设计电子图书 汉诺塔,用C写的汉诺塔(hanoi)程序

    用C写的汉诺塔(hanoi)程序 分类:计算机等级 | 更新时间:2016-07-07| 来源:转载 #include void movedisc(unsigned n,char fromneedle ...

  7. 汉诺塔(Hanoi)递归算法

    相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘. 游戏的目标:把A杆上的金盘全部移到C杆 ...

  8. 【头歌】汉诺塔(Hanoi)的递归算法

    任务描述 本关任务:汉诺塔(Hanoi)的递归算法. 相关知识 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到 ...

  9. JAVA(4)学习笔记:JVM虚拟机上的栈、大驼峰命名法和小驼峰命名法、实参和形参、重载方法、调用栈、递归练习(汉诺塔+斐波那契数列)、数组的定义、数组的初始化、增强for循环。

    接上次的博客:JAVA学习(3)--知识整理以及一些简单程序(猜数字游戏.求各种自幂数.求出一个数字的二进制位中1的个数.获取一个数二进制序列中所有的偶数位和奇数位.求公约数的多种实现方式.输入密码程 ...

最新文章

  1. HTTP协议:看个新闻原来这么麻烦
  2. 用linux下常用命令wget进行整站下载(递归下载至本地)
  3. OpenGL之GLFW入门学习
  4. centos7安装face_recognition踩各种坑
  5. 192.168.8.1手机登陆_荣耀Magic UI 3.1即将升级!这10款荣耀手机4月可期
  6. 知道答案吗?知道为什么是这个答案吗?
  7. 【报告分享】2022年中国商业十大热点展望.pdf(附下载链接)
  8. 手机拍照普及,相机依然拥有不可替代的优势
  9. Atitit.注重细节还是关注长远??长远优先
  10. Stata: 空间权重矩阵的构建
  11. 尚硅谷视频分享_硅谷的女儿分享了她的“书呆子”故事
  12. 当KPI说谎:数据科学错误的高昂代价
  13. 【nRF Connect】一、下载方法及简介
  14. 【填空题】130道面试填空题
  15. 清明时节雨纷纷,路上行人欲断魂; 清明,请为逝去的亲人捎去祝福!
  16. 【2D detection】Deformable DETR论文阅读记录
  17. Android直播软件搭建中实用的录制编辑方案有哪些
  18. 贸易大时代:代理IP助力企业出海
  19. hibernate 出现 org.hibernate.MappingException: entity class not found 的解决办法
  20. 爬虫(7):忽略安全证书爬取12306数据

热门文章

  1. FPGA 设计怎样进行面积优化(逻辑资源占用量优化)
  2. 怎样连接股票数据接口?
  3. 如何自学Python(2020版)
  4. 在职高学C语言程序设计,中职学校C语言程序设计教学方法.doc
  5. html中元素居中的五种方法
  6. bp上传php文件,文件上传-1
  7. python中的result是什么_python中result什么意思
  8. 转:Google大数据三篇著名论文中文版
  9. JAVA设计模式之单例模式详细分析(全)
  10. matlab 两列排序,在Matlab中对列进行排序