汉诺塔问题(递归操作)

简介: 汉诺塔问题(递归操作)

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

故事导入,开始正文

我们自己先玩三个会发现,都会有一个步骤是,最大的在原地,目标的杆子没有盘,中间暂存的盘子有从小到大的盘子,那么将最大的盘子移动到目标杆子上后,此时他的塔可以看作和上一层塔,(假如原先4层,这一步后就可以将它看作为三层),换句话说他就是可以将一个大问题,转换成小问题。

void move(char pos1,char pos2){
    printf("%c->%c\n",pos1,pos2);
}
void hanoita(int n,char pos1,char pos2,char pos3){
 if(n==1)
     move(pos1,pos3);
                             //将初始的只有一个盘子,移动到目标杆子
 else{
        hanoita(n-1,pos1,pos3,pos2);
        move(pos1,pos3);
        hanoita(n-1,pos2,pos1,pos3);
}
}
int main () {
    int n=0 ;
    char a='A';
    char b='B';
    char c='C';
    scanf("%d",&n);
    hanoita(n,a,b,c);
return 0;
}

     所以,上面的那个就相当于输出移动的盘子名,,下面的是遍历一层一层将它剥开


相关文章
汉诺塔问题(函数递归)
汉诺塔问题(函数递归)
122 0
|
11月前
|
汉诺塔递归问题,递归思路详解
汉诺塔递归问题,递归思路详解
212 0
利用函数递归求汉诺塔问题
利用函数递归求汉诺塔问题
96 0
汉诺塔 递归问题
汉诺塔 递归问题
144 0
递归问题的实际运用:汉诺塔问题
递归问题的实际运用:汉诺塔问题
148 0
递归问题的实际运用:汉诺塔问题
【C】青蛙跳台阶和汉诺塔问题(递归)
【C】青蛙跳台阶和汉诺塔问题(递归)
191 0
【C】青蛙跳台阶和汉诺塔问题(递归)
【递归问题】——汉诺塔
【递归问题】——汉诺塔
264 0
汉诺塔(递归+ 非递归版)
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上, 有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下:
301 1
汉诺塔(递归+ 非递归版)
C#中汉诺塔问题的递归解法
百度测试部2015年10月份的面试题之——汉诺塔。 汉诺塔就是将一摞盘子从一个塔转移到另一个塔的游戏,中间有一个用来过度盘子的辅助塔。 百度百科在此。 游戏试玩在此。 用递归的思想解决汉诺塔问题就是分为两种情况: 第一种情况是只有一个盘子的情况,也就是最基本的情况,这种情况下,直接将该盘子从原始塔转移到目标塔即可胜利; 第二种情况是右n个盘子的情况,也就是普遍情况,这种情况下,要将除了最底下的那个盘子以外的(n-1)个盘子从原始塔转移到辅助塔,再把最底下的那个盘子(第n个盘子)从原始塔转移到目标塔,最后将辅助塔的(n-1)个盘子从辅助塔转移到目标塔。
1873 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等