我不明白河内塔的递归代码:我似乎没有得到的具体点是目标塔和原点之间的切换,反之亦然:
我基本上理解递归是什么,堆栈是什么,但我不明白为什么塔的顺序改变了.
对你的帮助表示感谢.谢谢.
// N件数
private voID Déplacer(short N,string o,string i,string d) { if (N == 1) { MessageBox.Show("Move " + o + "to " + d); lstUn.Items.Add((lstUn.Items.Count + 1).ToString() + "-" + "Move " + o + " vers " + d); return; } else { //Switch d and i Déplacer((short)(N - 1),o,d,i); lstUn.Items.Add((lstUn.Items.Count + 1).ToString() + "-" + "Déplace " + o + " vers " + d); MessageBox.Show("Déplace " + o + " vers " + d); //1 vers 3 Déplacer((short)(N - 1),i,d); }解决方法 塔的顺序是改变的,因为两个递归步骤具有不同的目的.对于其中一个,目的是“将整个堆栈从A塔移动到C塔”(目标#1).另一方面,目的是“通过将所有其他环放在塔B上”将底环从塔A移动到塔C“(目标#2).
如果你看一个有3个环的例子,这可能是最容易理解的.最初我们有:
A (3)(2)(1)BC
我们想将环从A移动到C,但为了做到这一点,我们首先需要将底环放在C上.因此,我们从目标#2开始.在目标#2中,我们需要将所有其他环移动到B上,因此当我们进入它时,我们得到目标#1,但目标塔变为B.一旦完成,我们得到:
AB (2)(1)C (3)
现在我们有从B到C的目标#1.但是要做到这一点,我们首先从B到C有目标#2(从B到A基本上是目标#1).所以,基本上,目标塔会发生变化,因为每次递归步骤我们都会在目标#1和目标#2之间切换.
总结以上是内存溢出为你收集整理的c – 我不懂河内算法全部内容,希望文章能够帮你解决c – 我不懂河内算法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)