|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
void hanoi(int n,char x,char y,char z);
void hanoi(int n,char x,char y,char z)
{
if(n==1)
{
printf("%c-->%c\n",x,z);
}
else
{
hanoi(n-1,x,z,y);
printf("%c-->%c\n",x,z);
hanoi(n-1,y,x,z);
}
}
int main(void)
{
int n;
printf("请输入汉诺塔的层数:");
scanf("%d",&n);
hanoi(n,'X','Y','Z');
return 0;
}
本帖最后由 李京 于 2021-2-4 15:26 编辑
这些注释,再加上汉诺塔那一课的知识点备忘,说不定可以看懂
#include<stdio.h>
void hanoi(int n,char x,char y,char z);
void hanoi(int n,char x,char y,char z)//n 是层数 x 最开始所有盘所在的柱子(起始位置) y 借助的柱子 z 要移动到的柱子(目标)
{
if(n==1)//判断是不是只有一层,(递归出口)
{
printf("%c-->%c\n",x,z);//就直接把第一个给移动到目标的柱子去
}
else//就要把最底层的盘移动到目标柱子去
{
hanoi(n-1,x,z,y);//就要把n-1层从x 借助 z 移动到 y
printf("%c-->%c\n",x,z);//把最底层的盘移动到目标柱子去(这里的时候除了最底层的盘,其他的已经到了y上了)
hanoi(n-1,y,x,z);//就要把n-1层的从y 借助 x 移动到 z 为什么是从y 因为你把盘移动到了 y 上
}
}
int main(void)
{
int n;
printf("请输入汉诺塔的层数:");
scanf("%d",&n);
hanoi(n,'X','Y','Z');
return 0;
}
你还可以看一看这个up主讲的递归 思路很清晰,不过有局限, https://www.bilibili.com/video/BV1Nx411D712
|
|