C语言 用递归实现汉诺塔
运行结果截图:
代码:
#include <stdio.h>
void hanoi(int, char, char, char);
void hanoi(int n, char x, char y, char z)
{
// 设置递归的结束条件为:n == 1
if(n == 1)
{
// 设置递归的输出
printf("%c --> %c\n", x, z);
}
else
{
/* 汉诺塔需要递归解决的两个步骤:
* 一、x通过z移动到y
* 二、y通过x移动到z
* 如果说函数hanoi的形式参数,第一个位置是char x,第二个位置是char y,第三个位置是char z,
* 那么在递归"递"的时候,函数每递到下一层,第一第二第三个位置并不一定是按xyz顺序传入的,
* 当函数回溯到n值为1,这时开始打印第一个位置和第三个位置的实际值,
* 因此printf("%c --> %c\n", x, z);打印出来并不一定是'x'和'z'。
* 打印完毕后就开始"归",执行上一层函数,
* 那么又会打印第一个位置和第三个位置的值。
*/
hanoi(n-1, x, z, y);
hanoi(n-1, y, x, z);
printf("%c --> %c\n", x, z);
}
}
int main(void)
{
int n;
printf("请输入汉诺塔的层数:");
scanf( "%d", &n);
hanoi( n, 'x', 'y', 'z');
return 0;
}