C++递归,汉诺塔
来源:互联网 发布:android sql语句 编辑:程序博客网 时间:2024/06/03 22:06
A为存放盘子的塔,B为目标塔,C为辅助塔
算法分为三步
一、将A上n-1个盘子全部放到C塔上
二、将A上剩下的一个盘子放到B塔上
三、将C塔上的盘子全部放到B塔上
注:不需要考虑如何移动n-1个盘子
递归过程:
首先,将A上n-1个盘子放到C上,然后将A上剩下的一个盘子放到B上,然后可以看成A为辅助塔,B为目标塔,C为放盘子的(B中有一个最大的盘子,但任何盘子都能放到上面,所以可以看做为空),然后将C上n-2个盘子放到A上,剩下的地n-1个盘子放到B上,此时便完成了一次递归,然后不断地重复上述过程即可
代码
ABC分别是123柱子,代码思路大概是这样的把N-1层的环子先通过C移到B,最后再把第N层的最大的环子移到C,这个时候就剩下一个N-1层的新“塔”,那么我们把他看成一个新的“塔”把B柱看成之前的A柱,通过C柱把(N-1)-1层移到A柱,再把第N-1层的最大(原本第二大)的环子放到C,如此循环最后N=1 就了解了。[cpp] view plain copy print?#include<iostream> using namespace std; void hanoi(int n,char a,char b,char c) { if(n==1) cout<<n<<" "<<a<<" "<<c<<endl; else { hanoi(n-1,a,c,b); cout<<n<<" "<<a<<" "<<c<<endl; hanoi(n-1,b,a,c); } } int main() { int n; cout<<"输入正整数:"<<endl; cin>>n; cout<<"结果为"<<endl; hanoi(n,'A','B','C'); /* 假设有4层,跟全排列差不多的想法,先把他看成3层,再看成2层,而且移动的方法是相同的。*/
阅读全文
0 0
- 递归问题解决汉诺塔(C)
- c递归实现 汉诺塔
- 【C语言】递归 - 汉诺塔
- 汉诺塔递归的c语言实现(递归)
- 汉诺塔递归实现[C代码]
- C语言汉诺塔--递归算法
- C++_递归实现汉诺塔
- C递归解简单汉诺塔
- C 递归
- 【c++】递归
- C 递归
- 经典递归应用--汉诺塔(C语言版)
- 汉诺塔C递归算法详细解答
- 算法思考--------汉诺塔c语言实现-------递归
- C/C++ 使用递归算法实现汉诺塔
- C/C++ 使用递归算法实现汉诺塔
- C/C++递归之汉诺塔求解
- 汉诺塔--c语言递归问题
- 敏捷开发与传统开发方式的比较
- java中if判断条件语句测试代码总结
- PHP常见漏洞与编码安全-PHP攻防入门-学习笔记
- 【数据结构】串、KMP 算法 Python 版
- Mysql删除某个数据库下所有的表
- C++递归,汉诺塔
- 在 ns2.35 添加ZRP 协议
- ASP.NET WebForm弹出对话框 确定取消点击事件
- 分享下一步步学习java的内容,希望对初学者有帮助,1.java的认识
- Java JVM 5: 认识OOM
- Redis入门(一)—— 在windows下搭建redis服务器
- IU71: Talking about the environment
- 我的第一个博客文章
- MySQL 一千个不用 Null 的理由