我面临着编写一个函数(用 C 语言)的任务,该函数可以解决 Hanoi 塔问题并显示圆盘的每一个 Action 。
有问题的递归函数是:void hanoi(int m, int *I, int* J, int* K)
,其中 m 是要从数组 I 移动到 K 的磁盘数,使用中间数组 J.
现在,我成功地编写了这个功能(我认为)但是无法放置打印功能,以便在每次移动磁盘后显示系统。
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)
按原样绘制系统(在控制台中)。
简而言之:我无法将对“dessine”的调用(或调用?)正确地放置在“hanoi”的主体内,以便系统按执行顺序显示。
最佳答案
唯一改变塔状态的是函数 deplacer()
。因此,如果您想可视化状态如何随时间变化,您应该在调用 deplacer()
之后立即调用 dessine()
。
关于在递归中正确调用显示函数(汉诺塔),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52802601/