加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 我不懂河内算法

发布时间:2020-12-16 09:39:13 所属栏目:百科 来源:网络整理
导读:老实说:从今年年初(高中高中)到我们最终看到递归的那一天,我一直在编程方面做得很好. 我不明白河内塔的递归代码:我似乎没有得到的具体点是目标塔和原点之间的切换,反之亦然: 我基本上理解递归是什么,堆栈是什么,但我不明白为什么塔的顺序改变了. 对你的帮
老实说:从今年年初(高中高中)到我们最终看到递归的那一天,我一直在编程方面做得很好.
我不明白河内塔的递归代码:我似乎没有得到的具体点是目标塔和原点之间的切换,反之亦然:

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

对你的帮助表示感谢.谢谢.
// 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)
B
C

我们想将环从A移动到C,但为了做到这一点,我们首先需要将底环放在C上.因此,我们从目标#2开始.在目标#2中,我们需要将所有其他环移动到B上,因此当我们进入它时,我们得到目标#1,但目标塔变为B.一旦完成,我们得到:

A
B (2)(1)
C (3)

现在我们有从B到C的目标#1.但是要做到这一点,我们首先从B到C有目标#2(从B到A基本上是目标#1).所以,基本上,目标塔会发生变化,因为每次递归步骤我们都会在目标#1和目标#2之间切换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读