#include <stdio.h>
void transmit(int n, char q, char f, char z);
//使n个环改变位置的策略步骤。q的位置是起点柱,f的位置辅助柱,z的位置终点柱
void move(char x, char y);
//告诉用户:把环从x柱放到y柱
int main()
{
int n;//总共有n个环
scanf("%d", &n);
transmit(n, 'A', 'B', 'C');
return 0;
}
void move(char x, char y)
{
printf("%c-->%c\n",x , y);
}
void transmit( int n, char q, char f, char z )
//起点 辅助 终点
{
if ( n == 1 )
{
move(q, z);//第二轮的时候再念注释。注意!此时的f是上次的z。
//注意到,叫什么名字不重要,是它代表的是起点还是终点还是辅助
}
else
{
transmit(n-1, q, z, f);
//再回头看一遍transmit中文的注释,叫什么名字不重要,重要的是在哪的位置
move(q, z);
transmit(n-1, f,q,z);
}
}
/*结果实验
3
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
5
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
A-->B
C-->B
C-->A
B-->A
C-->B
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
B-->A
C-->B
C-->A
B-->A
B-->C
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
*/
始终清晰transmit的各个形参的位置所代表的意义
找到递推的关系式,不需要去细致地跟踪它的正确移动过程,因为递推本就是到这来的(此题)。
另外一定要找到是递推结束的终点。