马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我是初学者,刚看到函数递归这里。想了3个小时写出递归求汉诺塔问题程序,和小甲鱼讲的答案不一样呢,问一下大神们能看懂我的思路吗?如果写出的程序只有自己能看懂,那就有点悲哀了。#include <stdio.h>
void main()
{
void hannuota(int fangxiang ,int n);
int n;
scanf("%d",&n);
hannuota(1,n);
printf("\n");
}
void hannuota(int fangxiang,int n)
/*
fangxiang=1 表示移动方向为从A移到C
fangxiang=2 表示移动方向为从A移到B
fangxiang=3 表示移动方向为从B移到C
fangxiang=4 表示移动方向为从C移到B
fangxiang=5 表示移动方向为从B移到A
fangxiang=6 表示移动方向为从C移到A
hannuota(int fangxiang,int n)表示按照规定方向移动n个盘子
*/
{
if(n==1)
{
switch(fangxiang)
{
case 1:
printf("%3d:A->C",1); //表示把1号盘子从A移动到C
break;
case 2:
printf("%3d:A->B",1); //表示把1号盘子从A移动到B
break;
case 3:
printf("%3d:B->C",1); //表示把1号盘子从B移动到C
break;
case 4:
printf("%3d:C->B",1); //表示把1号盘子从C移动到B
break;
case 5:
printf("%3d:B->A",1); //表示把1号盘子从B移动到A
break;
case 6:
printf("%3d:C->A",1); //表示把1号盘子从C移动到A
}
}
else
{
switch(fangxiang)
{
case 1:
hannuota(2,n-1);
printf("%3d:A->C",n); //表示把n号盘子从A移动到C
hannuota(3,n-1);
break;
case 2:
hannuota(1,n-1);
printf("%3d:A->B",n); //表示把n号盘子从A移动到B
hannuota(4,n-1);
break;
case 3:
hannuota(5,n-1);
printf("%3d:B->C",n); //表示把n号盘子从B移动到C
hannuota(1,n-1);
break;
case 4:
hannuota(6,n-1);
printf("%3d:C->B",n); //表示把n号盘子从C移动到B
hannuota(2,n-1);
break;
case 5:
hannuota(3,n-1);
printf("%3d:B->A",n); //表示把n号盘子从B移动到A
hannuota(6,n-1);
break;
case 6:
hannuota(4,n-1);
printf("%3d:C->A",n); //表示把n号盘子从C移动到A
hannuota(5,n-1);
}
}
}
|