首页 > 解决方案 > 以递归方式正确调用显示函数(河内塔)

问题描述

我面临的任务是编写一个函数(用 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”,以便系统按执行顺序显示。

标签: crecursion

解决方案


唯一改变塔的状态的是函数deplacer()。因此,如果您想可视化状态如何随时间变化,您应该在调用dessine()之后立即调用deplacer()


推荐阅读