c语言对汉诺塔算法的思考

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

初学递归,对于汉诺塔算法的一些思考

一、汉诺塔是什么?

游戏目标:将tower1的圆块全部移动到tower2或3上
游戏玩法:一次移动一个且大的圆块不能放到小的圆块上
如下操作:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
链接: link//点击这个链接可以试一试汉塔诺游戏

二、对于汉塔诺的深刻理解

1.数学理解

在这里插入图片描述
在这里插入图片描述
//兄弟们字太丑理解一下

2.递归理解

递归循环不断将移动(n-1)个圈这一个操作分解成更小的操作(继续将(n-1)分解成1和(n-2))//大概理解一下,我讲的不太清楚这边,功力还不够。

3.代码演示

代码如下(示例):

#include <stdio.h>
//函数返回总步数
int hn_ta (int n)//n为圈数
{
    if(n==1) return 1;//这里当n=1是要停止操作不然n会一直减一,返回1是因为最后s1=1.
    return 2*hn_ta(n-1)+1;//即Sn=2S(n-1)+1


}
int main()
{
    int a,n;
    scanf("%d",&n);
    a=hn_ta(n);
    printf("\n将n个圈放入另一个需要%d次",a);
    return 0;
}

总结

总结一下:我觉得可以将递归函数理解成一种一直重复的操作。//对汉诺塔递归思想讲的不是很清晰,主要是其中的数学思想大家可以体会体会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值