我比较仔细的研究过,看我这个
程序代码:
# include "stdio.h"
void move(char x, char y) //自定义move函数,用来将块从起始柱子x移动到目标柱子y,这里的x,y为形参,不代表具体哪根柱子
{
printf("\t%c-->%c\n",x,y);
}
void hannuota(int n, char a, char b, char c) //自定义hannuota函数,这里的a,b,c为形参,不代表具体哪根柱子
{
if (n == 1)
move(a, c); //调用自定义函数move
else
{
hannuota(n-1, a, c, b); //第一行递归
move(a, c); //调用自定义函数move
hannuota(n-1, b, a, c); //第二行递归
}
}
int main(void)
{
int n;
printf("请输入要移动的块数:\n");
scanf("%d", &n);
hannuota(n, 'a', 'b', 'c');
return 0;
}
/*执行详细步骤:当n = 3 时
n = 3 n = 2 n = 1
| |h(1, a, b, c)=>move(a, c)=> a->c //1
|h(2, a, c, b) |move(a, b) a->b //2
| |h(1, c, a, b)=>move(c, b)=> c->b //3
|
h(3, a, b, c) |move(a, c) a->c //4
|
| |h(1, b, c, a)=>move(b, a)=> b->a //5
|h(2, b, a, c) |move(b, c) b->c //6
| |h(1, a, b, c)=>move(a, c)=> a->c //7
|
执行结果:
请输入要移动的块数:
3
a-->c
a-->b
c-->b
a-->c
b-->a
b-->c
a-->c
*/
[
本帖最后由 whukeming 于 2013-5-17 14:39 编辑 ]