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

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

         自学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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值