c – 我不懂河内算法
发布时间:2020-12-16 09:39:13 所属栏目:百科 来源:网络整理
导读:老实说:从今年年初(高中高中)到我们最终看到递归的那一天,我一直在编程方面做得很好. 我不明白河内塔的递归代码:我似乎没有得到的具体点是目标塔和原点之间的切换,反之亦然: 我基本上理解递归是什么,堆栈是什么,但我不明白为什么塔的顺序改变了. 对你的帮
老实说:从今年年初(高中高中)到我们最终看到递归的那一天,我一直在编程方面做得很好.
我不明白河内塔的递归代码:我似乎没有得到的具体点是目标塔和原点之间的切换,反之亦然: 我基本上理解递归是什么,堆栈是什么,但我不明白为什么塔的顺序改变了. 对你的帮助表示感谢.谢谢. 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之间切换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |