汉诺塔问题(递归操作)

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

汉诺塔(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;
}

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


相关文章
|
5月前
|
算法 C语言
汉诺塔问题(函数递归)
汉诺塔问题(函数递归)
42 0
|
6月前
|
Java Python
汉诺塔递归问题,递归思路详解
汉诺塔递归问题,递归思路详解
69 0
|
6月前
|
机器学习/深度学习
利用函数递归求汉诺塔问题
利用函数递归求汉诺塔问题
54 0
汉诺塔 递归问题
汉诺塔 递归问题
80 0
递归问题的实际运用:汉诺塔问题
递归问题的实际运用:汉诺塔问题
102 0
递归问题的实际运用:汉诺塔问题
|
机器学习/深度学习 算法 C语言
函数递归+青蛙跳台阶——“C”
函数递归+青蛙跳台阶——“C”
|
C++ C语言
你是真的“C”——函数递归详解汉诺塔
利用函数递归手把手求解汉诺塔
107 0
你是真的“C”——函数递归详解汉诺塔
汉诺塔(递归+ 非递归版)
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上, 有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下:
232 1
汉诺塔(递归+ 非递归版)