当前位置:
文档之家› C语言程序设计(汉诺塔问题)
C语言程序设计(汉诺塔问题)
printf("the step of move %d diskes :",m);
tian(m,'A','B','C');
} void tian(int n,int x,int y,int z)
66 67
{void move(int x,int y); if(n==1) move(x,z);
else {tian(n-1,x,z,y); move(x,y); tian(n-1,y,x,z);
C 语言程序设计(汉诺塔设计)
#include<stdio.h>
void main()
{void tian(int n,int x,int y,int z);
/*函数声明*/
int m;
printf("please enter the number of diskes:\n");
scanf("%d",&m);
/*当我选定这一行的时候 然后单击组间选择调试 run to_ 发现不管输入的 x 值是多少 ABC 的值都是 65
后来才发现原来是他们所代表的十进制的值*/
/*这里是递归函数的结束条件*/
}
}
void move(int x, int y)
/*
定义 move 函数用来显示移动的路线*/
{printf("%c——>%c\n",x,y);
3 个盘子 可以简化为。。。。*/
}
/*汉洛塔问题:如果有 N 个盘子 那么可以简化为 n-1 个盘子和一个盘子来处理,只要先把 上面的 n-1 个盘子从 A——>B 把第 n 个盘子由 A——>C 再把 n-1 个盘子由 B——>C
即可;
n-1 盘子 那么可以简化为 n-2 个盘子和一个盘子来处理 只要 把
上面的 n-2 个盘子从 A——>B 把第 n 个盘子由 A——>C 再把 n-1 个盘子由 B——>C
即可;
n-3 盘子 那么可以简化为 n-3 个盘子和一个盘子来处理 只要 把
上面的 n-4 个盘子从 A——>B 把第 n 个盘子由 A——>C 再把 n-1 个盘子由 B——>C 即可;
N-子 那么可以简化为 3 个盘子和一个盘子来处理 只要 把 上面的 3 个盘子有 a 到 b 把第 4 个盘子由 a 到 c 再把上面的三个盘子由 b 到 c;