c – 我不懂河内算法

c – 我不懂河内算法,第1张

概述老实说:从今年年初(高中高中)到我们最终看到递归的那一天,我一直在编程方面做得很好. 我不明白河内塔的递归代码:我似乎没有得到的具体点是目标塔和原点之间的切换,反之亦然: 我基本上理解递归是什么,堆栈是什么,但我不明白为什么塔的顺序改变了. 对你的帮助表示感谢.谢谢. // N件数 private void Déplacer(short N, string o, string i, string 老实说:从今年年初(高中高中)到我们最终看到递归的那一天,我一直在编程方面做得很好.
我不明白河内塔的递归代码:我似乎没有得到的具体点是目标塔和原点之间的切换,反之亦然:

我基本上理解递归是什么,堆栈是什么,但我不明白为什么塔的顺序改变了.

对你的帮助表示感谢.谢谢.
// 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 – 我不懂河内算法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1214406.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存