汉诺塔递归代码为什么这么难理解 递归采用什么结构来实现?
浏览量:4297
时间:2023-07-07 20:13:13
作者:采采
递归采用什么结构来实现?
说到递归,阶乘,斐波那契和谭老师 人们自然会想到河内塔。说到递归数据结构,当然是树型结构。
c语言。汉诺塔问题中的hanoit(n-1,a,b,c)是如何实现将a上面的(n-1)个盘移到b棒?
所以你可以 不看代码就不能准确地找到问题。
通常汉诺塔问题是通过递归实现的,n-1应该是递归调用汉诺塔函数中的汉诺塔。
汉诺塔递归算法?
1 //河内塔
2 #包含ltstdio.hgt
3 Void Hanoi (int n,char a,char b,char C)//这里代表通过b列将A列上的板块移动到C列。
4 {if (1 n) //如果是板块,直接把A列上的板块移到c。
5 {
6 printf(
7层汉诺塔最简单玩法?
七层楼高的河内塔游戏至少需要127级台阶。其实算法很简单。当板数为n时,移动次数应等于2n–1。后来,一位美国学者发现了一种出乎意料的简单方法,只需要依次两步。首先将三列按顺序排列成成品字体,将所有圆盘按降序放在A列上,根据圆盘数量确定列排列顺序:若n为偶数,A B C;顺时针放置;如果n是奇数,顺时针依次放A C B。(1)将圆盘1从当前列顺时针移动到下一列,即当n为偶数时,若圆盘1在A列,则移动到B列;如果光盘1在b列,将其移动到c;如果磁盘1在c列,将其移动到a。(2)然后,将其他两个支柱上的可移动磁盘移动到新支柱。即,将非空列上的光盘移动到空列,当两列都不为空时,移动较大的光盘。此步骤不指定要移动哪个磁盘。你可能觉得有很多可能,其实不是,唯一能实施的行动就是。(3)重复(1)和(2)的操作,最后可以按规定完成河内塔的移动。所以结果很简单,就是按照移动规则把金块往一个方向移动:比如汉诺塔三阶塔的移动:A → C,A → B,A → C,B → A,B → C,A → C .汉诺塔问题也是编程中经典的递归问题。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。