无我的侠圣 发表于 2017-3-1 16:40:00

初学者,想了3个小时写出递归求汉诺塔问题程序,求指点

我是初学者,刚看到函数递归这里。想了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);
      }
    }
}

新手·ing 发表于 2017-3-1 22:15:18

为什么要学这么麻烦的东西,来学习Python吧

lyftw 发表于 2017-3-4 15:33:41

路过必回   努力努力
页: [1]
查看完整版本: 初学者,想了3个小时写出递归求汉诺塔问题程序,求指点