程序设计与算法----递归汉诺塔问题
汉诺塔
古代有一个梵塔,塔内有三个座A,B,C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移动到C座,但每次只能允许移动一个盘子,并且在移动的过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求输出移动的步骤。
算法思想:这是一个典型的递归的问题,将A座盘子移动到C座,用B座做中转,这个问题可以分解成,先把n-1个盘子移动到B座,然后再把剩下的一个盘子移动到C座,然后再把B座上的n-1个盘子移动到C座,把n-1个盘子从A座移动到B座,他们的形式相同,但规模变小,因为移动的盘子数量变少了。
#include<iostream>
using namespace std;void hanoi(char begin,char mid,char end,int n){if(n==1){//当只有一个盘子的时候,直接将盘子从A移动到C cout<<begin<<"->"<<end<<endl; return ;}else{//当有多个盘子的时候,先将n-1个盘子从A移动到B,然后再将1个盘子从A移动到C,最后//将剩下的n-1个盘子从B移动到C,中转为剩下的一个。 hanoi(begin,end,mid,n-1);cout<<begin<<"->"<<end<<endl;hanoi(mid,begin,end,n-1);return ;}
}
using namespace std;
int main(){int n;cin>>n; //输入的n表示盘子数 hanoi('A','B','C',n); //将n个盘子从A移动到C,以B为中转 return 0;
}
程序设计与算法----递归汉诺塔问题相关推荐
- 算法--递归--汉诺塔问题
文章目录 1. 问题分析 2. 面试题 1. 问题分析 游戏规则:一次只能挪一片:小的只能在大的上面:把所有的从A柱挪到C柱. 递推公式: 上部 n - 1 个 A 到 B: 最底下 1 个 A 到 ...
- 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)
第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...
- python面向过程实践汉诺塔_递归汉诺塔-和递归汉诺塔相关的内容-阿里云开发者社区...
多柱汉诺塔最优算法设计探究 多柱汉诺塔最优算法设计探究 引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因 ...
- 经典算法之汉诺塔求解问题
法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64 ...
- python函数递归 汉诺塔
4.7 python函数递归 汉诺塔 代码: def hanno(n,A,B,C):global stepif n==1:print('{}->{}'.format(A,C))step +=1e ...
- 用java编写汉诺塔问题_数据结构与算法之汉诺塔问题(Java递归)
汉诺塔问题: 有三根柱子,源杆A,暂存杆temp,目的杆C A上有n层盘子,由小到大向下排列,现需要将A杆的盘子移到C杆中 要求:1)大的盘在下面,小的盘在上面 2)一次只能移动一个盘子 个人思路:先 ...
- 用python递归的算法解决汉诺塔问题
关于递归的四条基准法则 基准情形: 必须由某些基准情形,它无需递归就能解出 不断推进: 对于那些需要递归的情形,每一次递归调用都必须要使求解的状况朝接近基准情形的方向推进 设计法则: 假设所有的递归调 ...
- python中汉诺塔如何理解_【Python学习之七】递归——汉诺塔问题的算法理解
汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...
- 汉诺塔算法python_经典算法:汉诺塔
学编程,学IT,算法也是必不可缺的,这一次给大家带来一个经典的递归算法题,汉诺塔.算是算法的入门小题目之一吧~ 视频教程 什么是汉诺塔? 我这里直接拉来一个图解释一下(挂了请联系我) 就是这么一个东西 ...
最新文章
- datagrid底部显示水平滚动_easyUI datagrid 横向滚动条显示问题
- python多线程代码_Python多线程代码求改错
- JavaEE进阶知识学习-----SpringCloud(六)Ribbon负载均衡
- Eclipse 3.7 安装Maven插件时报错:requires 'bundle org.slf4j.api 1.6.2' but it could not be found...
- 寻找免费的阿里云云盾隐秘购买入口,申请并下载ssl证书(https证书)的详细步骤
- 服务器性能查看常用命令
- 【机器学习】朴素贝叶斯(Naive Bayes)
- LeetCode 217 存在重复元素
- JavaScript基础三
- java jni 结构体_JNI基础 -- C++基础知识(结构体共用体 )
- (编程解决)List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个
- .NET:枚举的默认值
- numpy之转置(transpose)和轴对换
- isjavaidentifierpart和isjavaidentifierstart有区别么?
- 三星emcp型号详解_eMCP终将成为过去式?解析:三星、美光所推出的uMCP为何物?...
- Openstack学习笔记(十五)-Horizon源代码学习笔记(五)
- 神经网络辨识的优势是,神经网络辨识的优势有
- 使用C#在VS窗体应用中调起一个选择框,完成图片替换
- 解决Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using backslash to be include
- UE4 Matinee的动画倒播