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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】