本篇博客只是一些个人感想和疑问,不适合作为汉诺塔问题的求解教程。

自学C语言两个多月,第一次摸爬滚打写出了汉诺塔问题的代码,关于汉诺塔问题的背景这里不再过多描述,以下是个人一些思考历程(第一次发布博客,如有不当之处请各位指出):

第一次接触汉诺塔问题是在自学时的递归部分,看完那部分的视屏教程老师提出了这个思考题。一开始进行了几遍汉诺塔游戏过后,我的疑惑是,该如何去构造使得该问题可以像游戏画面一步一步的在屏幕上打印出来,创建三个数组作为三根柱子?但是对我来说未免也太过复杂了,考虑到数组内容的拷贝,以及每次移动一块,而且大块必须在下方,我始终想不到好的解决方案。并且递归这部分每次都让人想的头晕,要写写画画好几张草稿纸,这里我在B站看到一条弹幕说“试图人脑压栈”,这可能就是头晕的根本原因——探究递归函数的内部细节。之后在“借鉴”了社区大佬的思考后,原来只要实现步骤的打印,再根据步骤一步一步的走就可以实现汉诺塔的移动。

然后B站up主“五点七边”提到“微操作”和“超级操作”让我觉得递归还能这样思考!不去过多探究递归的内部细节,而是相信只要我们设置好递归结束条件和当前层的结果处理,递归调用就一定可以正确的实现它的功能。以下是代码:

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>void move(int n, char scr, char dest)
{//将具体移动步骤打印出来printf("由%c->%c\n",scr, dest);
}int Hannuota(int n, char x, char y, char z)
{//当只有一层汉诺塔时,直接a->c(微操作)if (n == 1){move(1, x, z);}else{//当汉诺塔层数n>1时,将n-1层汉诺塔全移动到b上,a->b(超级操作)Hannuota(n - 1, x, z, y);//这时a上只有最后一层汉诺塔,直接将他移动到c上,a->c(微操作)move(n, x, z);//最后将b上的n-1层汉诺塔全移动到c上,b->c(超级操作)Hannuota(n - 1, y, x, z);}return 0;
}int main()
{int n = 0;//设置汉诺塔的层数scanf("%d", &n);//传入a,b,c字符作为三根柱子的名字,每一步的操作都可以用由 x柱->y柱 来表示如三层汉诺塔://a->c a->b c->b a->c b->a b->c a->cHannuota(n, 'a', 'b', 'c');return 0;
}

这里的Hannuota(n-1,x,z,y)就是一个超级操作,这里因为作者画图水平有限,不去演示3层汉诺塔的内部移动细节来证明代码逻辑。只要相信这个超级操作可以实现将n-1层的汉诺塔由a移动到b上,只要两个微操作的正确性和逻辑性可以满足,则超级操作就可以实现。由于作者水平有限,不足之处还请指出。

以下是我写这篇博客的主要原因希望有前辈可以为我提出一些意见:

我是一名大四的本科生,大四之前想着随便找个工作干着就行了。因为各种原因,在投过多家公司后,突然发觉回首大学三年,好像无一技之长,成绩也只是专业中间,感觉未来越发迷茫。就下定决心最后一点时间要学会一门技术,我觉得有一技在身,最起码可以稍微有点底气,可以养活自己,根据现有条件和个人的兴趣,在B站上看到Bit鹏哥的c语言教学视频后,就正式开始了向程序员进发的路程。

每周每天的学习时间在6小时左右,对于课程的内容一直都有在记笔记,将自己的理解和看法记录下来,每次作业的编程题都能够自己实现,目前阶段我学习到了结构题、枚举、联合体这个部分,之前的内容包括指针,数组,函数,循环,分支;之后还会有动态内存分配、文件操作、c语言预处理这几个部分。如果我想要以编程作为自己的工作,我在此后还应该继续学习那些相关的内容呢?操作系统、数据结构、网络、算法?什么时候需要向C++或其他计算机语言延申呢?我希望有路过的前辈不吝赐教,提出一些学习经验,分享自己的学习路线。万分感谢!!!

汉诺塔问题解法心路历程及C语言学习请教相关推荐

  1. 数据结构之栈与递归的应用(汉诺塔递归解法)

    上一节简单的讲述了递归的实现与简单应用,接下来我们说一下另一个经典应用. 汉诺塔递归解法 一.起源: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, ...

  2. 汉诺塔问题(递归思想)(堆栈学习)

    #include<stdio.h>//汉诺塔问题运用到递归思想, int num=0 ;//首先要给大家介绍一下堆栈 //想象一下,有一个递归函数当他执行自己本身的程序时 //因为条件满足 ...

  3. 汉诺塔(hanoi)问题(C语言,递归)

    一.什么是汉诺塔? 设有 a.b. c 共 3 根塔座, 在塔座 a上堆叠 n个盘子, 每个盘大小不同, 只允许小盘在大盘之上,最底层的盘最大.   游戏要求:现在要求将 a上的盘全都移到 c 上,在 ...

  4. 汉诺塔问题详解 递归实现 C语言

    目录 一.前言 二.游戏规则 三.思路讲解 四.完整代码 五.最终结果展示 一.前言 汉诺塔:汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,  其中一根柱子 ...

  5. 四柱子汉诺塔c语言程序代码,汉诺塔n=4(4个盘)c语言递归编程代码

    满意答案 /**************************** 汉诺塔的算法就3个步骤: 第一,把a上的n-1个盘通过c移动到b. 第二,把a上的最下面的盘移到c.a成了空的. 第三,因为n-1 ...

  6. 汉诺塔问题c++递归解法

    ​汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆 ...

  7. pygame做的著名游戏_pygame教程(十):汉诺塔游戏

    前言 这一章我们继续来学习游戏的设计,带孩子去科技馆,看到有一种叫做"汉诺塔"的小游戏,这个智力游戏应该很多同学听说过,它首先在三根柱子中的第一根上摆放大小不一的圆盘,然后要求玩家 ...

  8. 要理解递归,得先理解递归--用Java语言由浅入深讲解汉诺塔游戏

    2019独角兽企业重金招聘Python工程师标准>>> 一.递归是什么? 定义:程序调用自身的编程技巧称为递归.它分为调用阶段和回退阶段,递归的回退顺序是它调用顺序的逆序. 递归使用 ...

  9. 汉诺塔自动解题动画中的iOS开发技巧

    引 前段时间做了一道题,要求实现汉诺塔游戏的自动解题动画: 汉诺塔游戏应该都了解规则: 1.将盘子全部移动到塔C 2.每次只能移动一个圆盘: 3.大盘不能叠在小盘上面. 要求由用户输入盘子的数量,绘制 ...

最新文章

  1. excel打不开怎么修复_SD卡坏了怎么办?一招教你拯救文件!
  2. ios wkwebview弹框_iOS WKWebView的javascript alert 不弹的解决方案
  3. iPhone遭遇最强烈的黑客攻击:密码、位置、联系人,敏感数据都泄露,谷歌发现的...
  4. 一个身份证号码验证接口[2]
  5. 关于 时钟抖动 Jitter 和 偏移 Skew
  6. Preloading组件。
  7. 人力资源管理之项目团队建设
  8. 解决报错:ssh: Could not resolve hostname c: Temporary failure in name resolutionlost connection
  9. 利用第三方Cookie和iframe完成广告显示(各大网站就是利用了第三方Cookie和iframe来显示百度和京东的广告)
  10. Mars Rover
  11. 基于python的智能家居系统_基于MicroPython的智能家居实验平台设计
  12. 全部开源!高仿微信界面
  13. 1055: 猴子吃桃
  14. Java解决角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
  15. uni-app开发小程序app页面中获取globalData
  16. JavaScript HTTP请求
  17. Sumo学习日记 - day1 从traci开始
  18. 利用注册表优化系统,减少开机时间
  19. phpstorm 2017激活
  20. python正则表达式 简单的手机号码格式的验证

热门文章

  1. Daz导出模型的部件中英文对照
  2. Activity的生存期
  3. java 解析der文件_java-如何读取也用bouncycastle在DER中编码的PK...
  4. 协议的起始位,停止位
  5. 矩阵树定理--luoguP4208 [JSOI2008]最小生成树计数
  6. 世界上第一个便便数据库需要您的帮助!【智能快讯】
  7. 计算机配置更新太慢,电脑更新速度慢怎么办
  8. python九九乘法表矩形_python九九乘法表和打印图形程序
  9. 三阶段面试题——vue
  10. Blbl里面终末的女武神的精彩片段批量采集的方法