不会吧,不会吧,全网最细汉诺塔讲解,不会有人不知道吧。面试官直呼内行,看完只想默默找水喝(C语言)

本文详细介绍了汉诺塔问题,包括问题定义、移动过程分析及递归思想的应用。通过C语言实现,解析了汉诺塔问题的解决步骤,帮助读者理解递归调用的过程。
摘要由CSDN通过智能技术生成

在这里插入图片描述

Hanoi(汉诺塔问题)

一、什么是汉诺塔

在研究汉诺塔问题时,我们要明白到底什么是汉诺塔。

1、有三根相邻的柱子,标号为A,B,C。 2、A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘。
3、现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。

关于汉诺塔的基本玩法呢,
大家也可以去度娘上搜索一下,切实感受一下。
本篇主要介绍解决汉诺塔问题的思想,所以玩法就不过多赘述。

二、分析

1、移动过程

就可以将其抽象成(这里是破解汉诺塔思想的关键):
假设A杆上有n个圆盘
第一步:把n - 1个圆盘从A杆经由C杆移动到B杆
在这里插入图片描述

第二步:将A杆上的第n个圆盘移动到C杆
在这里插入图片描述
第三步:再将n - 1个圆盘从B经A移动到C
最终状态

2、应用思想+函数雏形

通过分析我们可以发现,汉诺塔问题其实就是运用了递归的思想:
1.有一个跳出条件:
n = 1时
只剩下一个圆盘,所以直接移动到C杆就好了

在这里插入图片描述

2.逐渐的接近这一跳出条件:
移动n个圆盘和移动n-1个圆盘的过程本质上是相似的;
但是其中的过程又完全不一样,因为圆盘插入的杆子变了
所以hanoi的函数雏形就可以大致表达出来

在这里插入图片描述
函数共有四个未知数,其中n代表圆盘的个数,A,B,C分别代表的三个杆子。
在这里插入图片描述

第一步:把n - 1个圆盘从A杆经由C杆移动到B杆
第二步:将A杆上的第n个圆盘移动到C杆
第三步:再将n - 1个圆盘从B经A移动到C

所以将上述三步用代码语言写出就是这样
其中要注意的是,第二步永远只是将A杆上的第n个圆盘移动到C杆,所以不是递归函数。

3、部分代码

通过上述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值