c语言递归函数

若在main函数中调用hanoi(3,'A','B','c')运行结果
void move(char getone,char putone)
{printf("%c-->%c\n",getone,putone);
}
void hanoi(int n,char one, char two,char three)
{if(n==1)move(one,three);
else
{ hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
结果是:
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
这个是怎么得到的啊,递归的头都晕了,能不能帮忙把过程写出来,越清楚越好!!!!

第1个回答  2009-04-22
分成三组:

(一),
目的:将1号和2号从A移到B
调用函数:hanoi(2,'A', 'C', 'B')。
在hanoi(2,'A', 'C', 'B')中递归调用如下:
A-->C----hanoi(1,'A', 'B', 'C')
A-->B----hanoi(1,'A', 'C', 'B')
C-->B----hanoi(1,'C', 'A', 'B')

(二),
目的:将3号从A移到C
调用函数:hanoi(1,'A', 'B', 'C')
A-->C

(三),
目的:将1号和2号从B移到C
调用函数:hanoi(2,'B', 'A', 'C')
在hanoi(2,'B', 'A', 'C')中递归递归如下:
B-->A----hanoi(1,'B', 'C', 'A')
B-->C----hanoi(1,'B', 'A', 'C')
A-->C----hanoi(1,'A', 'B', 'C')
=====================
总共调用了7次函数,
只要hanoi()的第一个参数大于1,它就会在内部调用自身3次,“直到第一个参数=1,然后调用printf()”。
hanoi(n, ...)调用hanoi(1, ...)的次数为2的n次方减去一。本回答被提问者采纳
第2个回答  2009-04-22
我做了个图,如果需要将你的EMAIL地址发过来。
相似回答