C程序设计问题 急急急急急急急急急急急急急急急!!!!!!!!!!!!!!!!!!!!

Tower of Hanoi问题

要求:采用全局和局部两种不同方法 r核心点 ①不能用move函数中的局部变量统计其中printf()的执行次数(圆盘移动次数),原因是局部变量在每一层递归调用中是新的变量,因此不能在前一次累计基础上继续累计②为了得到累计结果,在每问题:统计Tower of Hanoi问题中圆盘移动次数 ③一层递归调用中需对共同的内存单元进行累加操作

#include<stdio.h>
void move(int,char,char,char);
int t=0;
int main()
{
int m;
printf("Input the number of dislike:");
scanf("%d",&m);
printf("The step to move %d dislikes:\n",m);
move(m,'A','B','C');
printf("\n");
printf("一共移动了%d次。",t);
printf("\n");
}

void move(int n,char x,char y,char z)
{
if(n>0)
{
move(n-1,x,z,y);
printf("\nMoving: %c->%c",x,z);
t++;
move(n-1,y,x,z);
}
return ;
}

谁可以帮我写一下这个程序的思路
求大神!!!!!!!!!!
我真不会啊
需要程序的讲解

  #include <stdio.h>

  void move (int h,char c,char f)//h为盘的编号,从c轴移到f轴

  {

  printf("The num of %d disk is moved: %c-->%c/n",h,c,f);

  }

  void hanoi (int n,char x,char y,char z)//n为盘的编号,x为这n个盘所在的轴,y为中间轴,z为目的轴

  {

  if (n == 1)

  move (1,x,z);

  else

  {

  hanoi(n-1, x, z, y);//先把x轴上编号为n的上面的n个盘从x(所在轴)移到y(目的轴),z为中间轴

  move (n,x,z);//将编号为n的盘从x移到n

  hanoi (n-1, y, x, z);//这时这n-1个盘在y轴上,将这n-1个盘从y轴(所在轴)移到z轴(目的轴),x为中间轴

    }

  }//整个是个递归调用,将n个盘的转移转化为n-1个盘的转移,在转为n-2个盘的转移…………1个盘的转移

  void main()

  {

  int num;

  printf("The number of disks:/n");

  scanf("%d",&num);

  hanoi(num,'A','B','C');

  }

和你那个一样的。。。你看懂了C语言实现的思路就好。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-13
去看看汉诺塔原理吧
相似回答