汉诺塔问题的求解程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.基于汉诺塔问题的求解程序,分别使用全局变量和局部变量来计算当塔中有

n个盘子时需要进行多少步的盘子移动次数(例如当塔中有5个盘子时,需要移动31次)。提示:当使用局部变量时,函数的原型可以为 long hanoi(int ,char,char,char),该函数的功能是完成hanoi塔的移动并返回其执行步数。

方法一:使用局部静态变量

#include

long hanoi(int n,char one, char two, char three)

/*该函数计算移动盘的步骤并返回移动步数 */

{

static long int count=0;

/* 定义静态局部变量count,用以计算总共移动他多少次 */

if(n==1)

{

printf("move %c--> %c\n",one, three);

count++;

}

else

{

hanoi(n-1,one,three,two);

printf("move %c--> %c\n",one, three);

count++;

hanoi(n-1,two,one,three);

}

return(count);

}

void main()

{

int m=0;

long int steps; /*定义长整型变量step用来装载hanoi函数的返回值*/

printf("please input the number of diskes:");

scanf("%d",&m);

printf("the steps are following:\n");

steps=hanoi(m,'A','B','C');

printf("They need %ld steps to move\n",steps);

}

方法二:使用一般局部变量

#include

long hanoi(int n,char one, char two, char three)

/*该函数计算移动盘的步骤并返回移动步数 */

{

long int count1=0, count2=0;

/* 定义局部变量count1,count2 */

if(n==1)

printf("move %c--> %c\n",one, three);

else

{

count1=hanoi(n-1,one,three,two);

printf("move %c--> %c\n",one, three);

count2=hanoi(n-1,two,one,three);

}

return(count1+count2+1);

}

void main()

{

int m=0;

long int steps; /*定义长整型变量step用来装载hanoi函数的返回值*/ printf("please input the number of diskes:");

scanf("%d",&m);

printf("the steps are following:\n");

steps=hanoi(m,'A','B','C');

printf("They need %ld steps to move\n",steps);

}

方法三:使用全局变量

#include

long count=0;/*定义全局变量来统计移动步数 */

void hanoi(int n,char one, char two, char three)

/* 该函数计算移动盘的步骤*/

{

if(n==1)

{

printf("move %c--> %c\n",one, three);

count++;

}

else

{

hanoi(n-1,one,three,two);

printf("move %c--> %c\n",one, three);

count++;

hanoi(n-1,two,one,three);

}

}

void main()

{

int m=0;

printf("please input the number of diskes:"); scanf("%d",&m);

printf("the moving steps are following:\n"); hanoi(m,'A','B','C');

printf("They need %ld steps to move\n",count); }

相关文档
最新文档