汉诺塔 递归问题

简介: 汉诺塔 递归问题

e15be592574e555e7f23849064fc3694_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA4oCcQ3J1c2jigJ0=,size_20,color_FFFFFF,t_70,g_se,x_16.png首先,分析最简单的一种情景:

只有一个圆盘,此时只需要将其从A柱移动到C柱即可。


再考虑两个圆盘的情景:

此时则需要先将第一个盘子通过(绕过)C柱移动到B柱;

然后将第二个盘子通过(绕过)B柱移动到C柱;

最后再将第一个盘子直接移动到C柱即可


当情景复杂些,存在三个盘子,该如何思考呢?


相同的道理,只需先处理上面的两个盘子将其看作一个整体,可将此化简为两个盘子的情景,按照上面的步骤可以解决问题。


将两个盘子作为一个整体,可先将第一个盘子通过(绕过)B柱移动到C柱,再将第二盘子通过(绕过)C柱移动到B柱,最后再将第一个盘子移动到B柱即可。


#include<stdio.h>
void hanoi(int i,char A,char B,char C)
{
  if (1 == i)
  {
  printf("%c->%c\n", A, C);
  }
  else
  {   
     //将A柱上的n-1个圆盘通过C柱移动到B柱上
  hanoi(i - 1, A, C, B);
  //将A柱中最后一个1圆盘直接移动到C柱上
  printf("%c->%c\n", A, C);
        //将B柱上n-1个圆盘借助A柱移动到C柱上
  hanoi(i - 1, B, A, C);
  }
}
int main()
{
  int i = 0;
  scanf("%d", &i);
  hanoi(i, 'A', 'B', 'C');
  return 0;
}


2b03887458c98c25a52c66bb0af3b962_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA4oCcQ3J1c2jigJ0=,size_18,color_FFFFFF,t_70,g_se,x_16.png


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