汉诺塔
古代有一个梵塔,塔内有三个座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. 算法--递归--汉诺塔问题

    文章目录 1. 问题分析 2. 面试题 1. 问题分析 游戏规则:一次只能挪一片:小的只能在大的上面:把所有的从A柱挪到C柱. 递推公式: 上部 n - 1 个 A 到 B: 最底下 1 个 A 到 ...

  2. 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)

    第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...

  3. python面向过程实践汉诺塔_递归汉诺塔-和递归汉诺塔相关的内容-阿里云开发者社区...

    多柱汉诺塔最优算法设计探究 多柱汉诺塔最优算法设计探究 引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因 ...

  4. 经典算法之汉诺塔求解问题

    法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64 ...

  5. python函数递归 汉诺塔

    4.7 python函数递归 汉诺塔 代码: def hanno(n,A,B,C):global stepif n==1:print('{}->{}'.format(A,C))step +=1e ...

  6. 用java编写汉诺塔问题_数据结构与算法之汉诺塔问题(Java递归)

    汉诺塔问题: 有三根柱子,源杆A,暂存杆temp,目的杆C A上有n层盘子,由小到大向下排列,现需要将A杆的盘子移到C杆中 要求:1)大的盘在下面,小的盘在上面 2)一次只能移动一个盘子 个人思路:先 ...

  7. 用python递归的算法解决汉诺塔问题

    关于递归的四条基准法则 基准情形: 必须由某些基准情形,它无需递归就能解出 不断推进: 对于那些需要递归的情形,每一次递归调用都必须要使求解的状况朝接近基准情形的方向推进 设计法则: 假设所有的递归调 ...

  8. python中汉诺塔如何理解_【Python学习之七】递归——汉诺塔问题的算法理解

    汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...

  9. 汉诺塔算法python_经典算法:汉诺塔

    学编程,学IT,算法也是必不可缺的,这一次给大家带来一个经典的递归算法题,汉诺塔.算是算法的入门小题目之一吧~ 视频教程 什么是汉诺塔? 我这里直接拉来一个图解释一下(挂了请联系我) 就是这么一个东西 ...

最新文章

  1. datagrid底部显示水平滚动_easyUI datagrid 横向滚动条显示问题
  2. python多线程代码_Python多线程代码求改错
  3. JavaEE进阶知识学习-----SpringCloud(六)Ribbon负载均衡
  4. Eclipse 3.7 安装Maven插件时报错:requires 'bundle org.slf4j.api 1.6.2' but it could not be found...
  5. 寻找免费的阿里云云盾隐秘购买入口,申请并下载ssl证书(https证书)的详细步骤
  6. 服务器性能查看常用命令
  7. 【机器学习】朴素贝叶斯(Naive Bayes)
  8. LeetCode 217 存在重复元素
  9. JavaScript基础三
  10. java jni 结构体_JNI基础 -- C++基础知识(结构体共用体 )
  11. (编程解决)List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个
  12. .NET:枚举的默认值
  13. numpy之转置(transpose)和轴对换
  14. isjavaidentifierpart和isjavaidentifierstart有区别么?
  15. 三星emcp型号详解_eMCP终将成为过去式?解析:三星、美光所推出的uMCP为何物?...
  16. Openstack学习笔记(十五)-Horizon源代码学习笔记(五)
  17. 神经网络辨识的优势是,神经网络辨识的优势有
  18. 使用C#在VS窗体应用中调起一个选择框,完成图片替换
  19. 解决Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using backslash to be include
  20. UE4 Matinee的动画倒播

热门文章

  1. 首批拟科创板IPO名单今日揭晓!
  2. 开发到底要不要自己做测试?
  3. 聊聊Vue(前端Vue面试包过)【面试干货】
  4. flutter ios上踩的一个坑
  5. 创建型模式、结构型模式和行为型模式_设计模式之创建型模式
  6. db2查询表结构语句_常用的sql语句集合(适合数据库初级人员)
  7. python random库下载_python random库
  8. FFMPEG基于内存的转码实例——输入输出视频均在内存
  9. Linux文件inode用完一例
  10. centos6和centos7防火墙的关闭