文章目录

  • 1. 问题分析
  • 2. 面试题

1. 问题分析


游戏规则:一次只能挪一片;小的只能在大的上面;把所有的从A柱挪到C柱。
递推公式:

  1. 上部 n - 1 个 A 到 B;
  2. 最底下 1 个 A 到 C ;
  3. 上部 n - 1 个 B 到 C;

终止条件:
n = 1 时,A 到 C;

/*** @description: 汉诺塔递归问题* @author: michael ming* @date: 2019/4/7 20:10* @modified by:*/
#include <iostream>
using namespace std;
void hanoi(size_t n, string startP, string middleP, string destP, size_t &counts)
{if(n == 1){cout << startP << " ---> " << destP << endl;counts++;return;}else{hanoi(n-1, startP, destP, middleP, counts);     //n-1个从开始-->中间cout << startP << " ---> " << destP << endl;    //最底下那个开始-->目的地counts++;hanoi(n-1, middleP, startP, destP, counts);     //n-1个从中间-->目的地}
}
int main()
{cout << "请输入汉诺塔层数:";size_t n, steps = 0;   cin >> n;hanoi(n,"a","b","c",steps);cout << "共走了 " << steps << " 步。" << endl;return 0;
}

2. 面试题

《程序员面试金典》面试题 08.06. 汉诺塔问题

  • 题目

在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。

请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。

你需要原地修改栈。

示例1:输入:A = [2, 1, 0], B = [], C = []输出:C = [2, 1, 0]
示例2:输入:A = [1, 0], B = [], C = []输出:C = [1, 0]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/hanota-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 解题
class Solution {public:void hanota(vector<int>& A, vector<int>& B, vector<int>& C) {h(A,B,C,A.size());}void h(vector<int>& A, vector<int>& B, vector<int>& C, int n){if(n == 1){C.push_back(A.back());A.pop_back();return;}h(A,C,B,n-1);C.push_back(A.back());A.pop_back();h(B,A,C,n-1);}
};

算法--递归--汉诺塔问题相关推荐

  1. 程序设计与算法----递归汉诺塔问题

    汉诺塔 古代有一个梵塔,塔内有三个座A,B,C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图).有一个和尚想把这64个盘子从A座移动到C座,但每次只能允许移动一个盘子,并且在移动的过程中 ...

  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. finalshell文件列表不显示_Jira面板配置_待办事项不显示问题列表
  2. [转载] 杜拉拉升职记——30 我保证以后一直对你好
  3. HP-UX平台安装Oracle11gR2数据库
  4. 前端学习(2331):angular之图片的使用
  5. 技术动态 | 清华大学开源OpenKE:知识表示学习平台
  6. C语言:进制转换(整数、字符串)
  7. 题目552-小数阶乘-nyoj20140811
  8. 什么是 Hadoop 生态系统
  9. python短期电力预测——基于LSTM神经网络
  10. 计算机主板时钟,电脑主板时钟电路工作原理
  11. gis连接表格到数据库失败_ArcGIS添加Excel数据的新老问题(连接数据库失败)
  12. Java实现发送短信
  13. Docker 配置加速器
  14. 机器人的弊议论文_机器人的利弊议论文
  15. iOS 打开本地或下载excel文件
  16. 5G通信系统的Salen-Valenzula信道分析
  17. ui设计要素;ui设计要素有哪些
  18. 小觅双目摄像头标准彩色版发布 为移动机器人视觉导航避障优化设计
  19. 酷炫命令行背景图操作步骤
  20. java map替换_在java的Map集合中,怎样更改value的值

热门文章

  1. 包r语言_R语言入门之寻找你的R包
  2. git管理账户忘记了_强制找回GitLab管理员账户密码的方法
  3. TD-SCDMA智能天线波束赋形能力的讨论
  4. YAML/Properties配置文件与Spring Boot(转)
  5. JS全选功能代码优化
  6. 今天动手熟悉了一下css和php
  7. C++11 新特性 —— 关键字noexcept
  8. fprintf/fscanf函数分析
  9. Datawhale组队-Pandas(下)文本数据(打卡)
  10. python sklearn 归一化_数据分析|Python特征工程(5)