c - 以递归方式正确调用显示函数(河内塔)
问题描述
我面临的任务是编写一个函数(用 C 语言)来解决河内塔问题并显示磁盘的每一个动作。
有问题的递归函数是:void hanoi(int m, int *I, int* J, int* K)
,其中 m 是使用中间数组 J 从数组 I 移动到 K 的磁盘数。
现在,我成功地编码了这个函数(我认为)但不能放置打印函数每次移动磁盘后都会显示系统。
void hanoi(int m, int* I, int* J, int* K) {
if(m>0) {
hanoi(m-1, I, K, J);
deplacer(I, K);
hanoi(m-1, J, I, K);
}
}
该函数void deplacer(int *A, int* B)
将顶部磁盘从 A 移动到 B(假设它是合法的)。
该函数void dessine(int* I, int* J, int* K, int m)
按原样绘制系统(在控制台中)。
简而言之:我无法正确地将调用(或调用?)到“hanoi”主体内的“dessine”,以便系统按执行顺序显示。
解决方案
唯一改变塔的状态的是函数deplacer()
。因此,如果您想可视化状态如何随时间变化,您应该在调用dessine()
之后立即调用deplacer()
。
推荐阅读
- python - 有没有办法用 POSIX_FADV_DONTNEED 标志打开 hdf5 文件?
- python - Seahub 无法通过 ModuleNotFoundError 运行初始启动
- linux - AWS IAM 或 Linux Newuser 允许访问我的后端
- c# - 使用 Paypal 智能按钮上线
- c# - ASP.Net 错误 System.InvalidOperationException
- haskell - 树状结构的递归方案
- node.js - 更新混合类型的猫鼬嵌套数组
- r - 停止 RStudio 在启动时创建两个文件
- sql - 计算每个唯一值
- python - 如何使用 openpyxl 保存到特定目录?