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;
}
posted @   JohnnyH  阅读(258)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示