Reference
「递归练习」汉诺塔_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
其实汉诺塔老早就写过了,不论是学Python还是C时,老师都讲过。
汉诺塔也是我头一次体会到Python的效率真的被C甩好几条街……
实现的重点就在于,不要去管上层的盘子怎么移动,只去关心最底层盘子的移动和计数。
用了全局变量cnt来计数,src、mid、dst分别表示源盘子,辅助盘子和目标盘子。
接口:
void hanoi(盘子数量,源柱子字符,辅助柱子字符,目标柱子字符)
#include <stdio.h>
int cnt=0;
void hanoi(int n,char src,char mid,char dst)
{
if(n==1)
{
cnt++;
printf("Moved Plate 1 from %c to %c\n",src,dst);//只有一块时直接移动
}
else
{
hanoi(n-1,src,dst,mid);//不要去关心怎么从左边经由右边移n-1个到中间,只要调用就行
printf("Moved Plate %d from %c to %c\n",n,src,dst);
cnt++;//这一步操作真正想要移动的只有最底下的盘子,计数也只计数这个
hanoi(n-1,mid,src,dst);//同样不要去关心怎么从中间经由左边移n-1个到右边,只要调用就行
}
}
int main(int argc, char const *argv[])
{
hanoi(10,'A','B','C');
printf("%d\n",cnt);
return 0;
}