C语言中Hanoi塔问题的递归实现
Hanoi塔问题是一个古典的数学问题,也是一个用递归方法解题的典型例题。其中问题为:古代有一个梵塔,塔内有三个座A,B,C。开始时A座上有64个盘子,盘子的大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只能移动一个盘,且在移动过程中三个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B盘。要把64个盘子从A座移到C座,需要移动2的64次方次,并且在一般情况下,我们是无法确认每一步的移动情况。
在这里我们采用递归方法,同时嵌套函数,可以去求解n个盘子的情况下,盘子的移动过程。这里我们的代码是:
#include <stdio.h>
int main()
{void hanoi(int n,char one,char two,char three);int m;printf("input the number of diskes:");scanf("%d",&m);printf("the step to move %d diskes:\n",m);hanoi(m,'A','B','C');return 0;} void hanoi(int n,char one,char two,char three) {void move(char x,char y);if(n==1)move(one,three);else{hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);}}void move(char x,char y){printf("%c-->%c\n",x,y);}
这里我们以三个盘子为例,输出结果:
将n个盘子从A座移到C座可以分解为三个步骤:
1:将A座上n-1个盘子借助C座先移到B座上;
2:把A座上剩下的那个盘子移到C座上;
3:将n-1个盘子从B座上借助A座移到C座上;
用Hanoi函数实现将n-1个盘子从一个座移到另一个座上,这是一个递归的过程。用move函数将一个盘子从一个座上移到另一个座上
C语言中Hanoi塔问题的递归实现相关推荐
- C++ Hanoi塔学习笔记(递归与非递归实现)
自己学习理解的笔记,欢迎补充. 1.Hanoi塔问题的递归解法 void Hanoi(int n, char a, char b, char c) {if (n == 1) {cout << ...
- 基础算法:Hanoi塔(递归)
Hanoi塔 "递归算法离不开递推方程的求解." 这里Hanoi塔有三个柱子,A\B\C.上面放着五个盘子,要将A柱的盘子全部移到C柱上: 其中规则: 1.小圆盘必须在大圆盘上面. ...
- 递归---Hanoi塔问题
http://shmilyaw-hotmail-com.iteye.com/blog/2077098 简介 关于Hanoi塔问题的分析,在网上的文章都写烂了.之所以打算写这篇文章,更多的是针对这个问题 ...
- 双色Hanoi塔问题-递归
双色Hanoi塔问题-递归 思想:1-将n-1个圆盘从A移动到C,B为辅助 2-将第n个圆盘从A移动到B,C为辅助 3-将n-1个圆盘从C移动到B,A为辅助 方式1:键盘输入,控制台输出. impor ...
- 汉诺塔问题c++递归解法
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆 ...
- C语言:汉诺塔(经典递归问题)
汉诺塔问题介绍 关于汉诺塔的传说: 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一 ...
- Hanoi塔(分治法的应用)
1.分治法 分治法的设计思想是将一个难以直接解决的大问题分解成一些规模较小的相同问题,以便各个击破,分而治之. 一般来说,分治算法在每一层递归上都有3个步骤: (1)分解:将问题分解成一系列子问题. ...
- 7-107 汉诺塔的非递归实现 (25 分)
7-107 汉诺塔的非递归实现 (25 分) 借助堆栈以非递归(循环)方式求解汉诺塔的问题(n, a, b, c),即将N个盘子从起始柱(标记为"a")通过借助柱(标记为" ...
- C++语言中std::array的神奇用法总结,你需要知道!
摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此, ...
最新文章
- RepeatMasker安装和使用——基因组重复序列注释
- sas数据集怎么导出_[求助]如何导出sas数据集的标签?
- 将日期转成指定格式_Excel小技巧——如何利用公式,快速将一串数字转换为日期格式...
- SAP CRM webclient ui drop down list key mode
- 软件:9款超级实用的办公软件,值得收藏!
- rust里mp5a4_Rust源码分析:channel内部mpsc队列
- Go range实现原理及性能优化剖析
- 【免费毕设】基于Web的subversion用户管理系统(系统+论文)
- 27留数及其应用(三)
- 关于URL编码/javascript/js url 编码
- apktool反编译apk,并重新打包
- 执着女股民:20年炒一只股票 翻几十倍很轻松
- win7加入网络计算机,win7怎么加入局域网工作组_win7加入局域网工作组的步骤
- 微服务架构-高性能Netty服务器-064:Netty实战与反序列化与序列化协议
- 小程序社交电商案例分享
- Linux 信号学习
- 从Servlet到SpringMVC演变过程详解(ServletContext 和WebApplicationContext, ApplicationContext给你安排上了)
- 北大AI公开课第九课--人工智能在视频中的应用by奇虎360颜水成
- PB反编译器(PBKiller) 2.5.18 特别版
- 打印机打印文件时,状态为spooling而不打印任何东西