利用递归函数求解汉诺塔问题,用递归实现汉诺塔问题

  利用递归函数求解汉诺塔问题,用递归实现汉诺塔问题

  #代码处于略低的位置——(6)河内塔问题(1):

  条件:在铜板装置上,有三根棒(没有A、B、C)和N个圆盘从下到上依次放置在A杆上。

  目标:将A条上的所有磁盘移动到C条上,并保持原来的堆叠顺序。

  规则:一次只能移动一个板块;

  在移动过程中,在所有三个杆上保持大板向下,小板向上。

  (2)思想——函数递归:

  函数递归本质上是一个循环;

  任何函数递归都必须有限制才能使其退出递归。所以我们把退出条件写在开头,也就是递归函数最内层n=1的移动方向。

  (3)然后我们用函数的递归来完成剩下的步骤,使其逐渐逼近最后一步。

  (3)找出循环(将磁盘分为两层,即上层(n-1)和下层最大的第n个磁盘):

  假设有两个圆盘(图中红框圈出的视为一个圆盘);

  摊成三张碟(见图中红框为两张碟);

  摊成N片(见图中红框为n-1片);

  编辑

  (4)归纳思想:

  没有圆盘的底柱效果相当于只有最大圆盘的底柱效果,即当我们移动上面(n -1)个圆盘时,请忽略第n个圆盘,这样更有助于理解;

  当我们要移动上面的n-1个磁盘时,按照规则是无法移动的,所以只能移动上面的n-2个磁盘,以此类推。我们最终可以移动的第一个磁盘是第一个磁盘。根据这个想法,我们有了函数递归。

  (5)如何理解A B C在5)hanoi()函数中的不同位置:

  (A,B,C)的关系是:将A列中的磁盘通过B列移动到C列;

  从图(A)换到图(B)时,我们需要借助B列转移圆盘,即n-1层的圆盘通过C列从A列堆叠到B列,所以是Hanoi (a,C,B);

  从图(B)换到图(C)时,我们会直接将A列的圆盘移动到C列,即hanoi(A,B,C),这也代表只有一个圆盘时的移动方向;

  从图(C)换到图(D)时,同样需要借助A列转移圆盘,即n-1层圆盘上的n-2层圆盘通过A列从B列堆叠到C列,所以是Hanoi (B,A,C);

  就这样,我们每次搬家,都会把所有的盘从小到大按一定的规律堆在C柱上.

  (6)代码如下:

  # define _ CRT _ SECURE _ NO _ WARNINGS 1

  #包含stdio.h

  void hanoi(int n,char A,char B,char C)

  {

  如果(n==1)

  {

  printf(%c- %c ,A,C);

  }

  其他

  {

  河内(n - 1,A,C,B);

  printf(%c- %c ,A,C);

  河内(n - 1,B,A,C);

  }

  }

  int main()

  {

  int n=0;

  char a,b,c;

  scanf(%d ,

  hanoi(n, a , b , c );

  返回0;

  }(7)重复上述过程后,结果如下:

  (因为A B C在循环中有规律地处于交换位置,盘面移动方向的起点和终点是由其数的奇偶性决定的,有一定的规律。)

  输入:3(奇数)

  a- c a- b c- b a- c b- a b- c a- c

  输入:4(偶数)

  a-b a-c B- c a-b c-a c-b a-b a-c B- c B- c B- a c-a B- c a-b a-b a-b a-c B- c

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: