提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
初学递归,对于汉诺塔算法的一些思考
一、汉诺塔是什么?
游戏目标:将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;
}
总结
总结一下:我觉得可以将递归函数理解成一种一直重复的操作。//对汉诺塔递归思想讲的不是很清晰,主要是其中的数学思想大家可以体会体会。