理解汉诺塔

本文介绍了汉诺塔游戏的概念,通过递归原理解析如何将一个n层的汉诺塔从一个柱子移动到另一个柱子,并详细阐述了递归过程的关键步骤。此外,还提供了PHP和C语言的实现代码示例。
摘要由CSDN通过智能技术生成

1.汉诺塔可以理解为一个移动塔的游戏,把一个n层的塔从一个柱子移动到另一个柱子上

2.这就是汉诺塔递归原型 hannuota(n, A,C)–n层的塔从A柱移动到C柱;每次必须回归到这个原型才算一次递归完成!
<就像1-100的递归累加f(n)=f(n-1)+n; 此时f(n)是递归原型,回归到f(n-1)>

3.中间需要借助一个柱子B,汉诺塔原型写成hunnuota(n,A,B,C)–n层塔从A柱借助B柱移动到C柱;

4.递归都要求有一个出口,也即是控制条件,当n=1时直接把塔从A移动到C即可,这就是出口
<如果n=2则需要移动两次才行,无法一次完成,不能出去>

5.n>1时,这一步是理解汉诺塔递归的关键,必须形成n-1层往C柱移动的形式,分为三步:
a. n层无法一次移动,那么可以理解为先把A上面的n-1层移动到B柱(hannuota(n-1,A,C,B))
b A柱剩下第n层的塔移动到C,
C 然后形成B柱上的n-1层移动到C柱上–
(hannuota(n-1,B,A,C)此时已经形成了递归的原型 不同的只是中间借助的柱子不同罢了!

下面是php代码跟C代码:

function han($n,$a,$b,$c)
{
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值