首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >汉诺塔递归算法流程图_汉诺塔算法递归表达式

汉诺塔递归算法流程图_汉诺塔算法递归表达式

作者头像
全栈程序员站长
发布于 2022-11-01 09:02:27
发布于 2022-11-01 09:02:27
79900
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

汉诺塔(Hanoi)

  • 编程实现把 A 的 n 个盘子移动到 C(盘子编号是 [1, n] ) 每次只能移动1个盘子 大盘子只能放在小盘子下面

1、汉诺塔 — 1个盘子

2、汉诺塔 — 2个盘子

3、汉诺塔 — 3个盘子

3、汉诺塔 — 思路

  • 其实分 2 种情况讨论即可 (1)当 n == 1时,直接将盘子从 A 移动到C (2)当 n > 1时,可以拆分成3大步骤 ①将 n– 1 个盘子从 A 移动到B

② 将编号为 n 的盘子从 A 移动到C

③将 n– 1 个盘子从 B 移动到C

✓ 步骤①③ 明显是个递归调用

4、汉诺塔 — 实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Hanoi { 

public static void main(String[] args) { 

new Hanoi().hanoi(3,"A","B","C");
}
/** * 将n个碟子从p1挪动到p3 * @param p2 中间的柱子 */
void hanoi(int n,String p1,String p2,String p3){ 

if (n == 1){ 

move(n,p1,p3);
return;
}
//将p3看作中间柱子,将n-1个碟子从p1移动到p2
hanoi(n-1,p1,p3,p2);
move(n,p1,p3);
//将p1看作中间柱子,将n-1个碟子从p2移动到p3
hanoi(n-1,p2,p1,p3);
}
/** * 将 no号盘子从 from 移动到 to * @param no 碟子 * @param from 开始移动的柱子 * @param to 移动到的柱子 */
void move(int no, String from,String to){ 

System.out.println("将"+no + "号盘子从" + from + "移动到"+to);
}
}
运行结果:
将1号盘子从A移动到C2号盘子从A移动到B1号盘子从C移动到B3号盘子从A移动到C1号盘子从B移动到A2号盘子从B移动到C1号盘子从A移动到C
  • T(n) = 2 ∗ T(n) − 1 + O(1) 因此时间复杂度是:O(2n)
  • 空间复杂度:O(n)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
learn-haskell
引言 Haskell不同于Scala,是一门纯函数式语言,它强制使用者使用函数式语法而没有妥协。 是一门强类型定义的静态类型语言。它的**类型模型基于推断理论(in-ferred)**并被公认为是函数语言中最高效的类型系统之一。你会发现该类型系统支持多态语义并有助于人们作出十分整洁清晰的设计。 支持Erlang风格的模式匹配(pattern matching)和哨兵表达式。你也能在Haskell中发现Clojure风格的惰性求值(lazyevaluation)以及与Clojure和Erlang相同的列表推导
刘笑江
2018/05/28
1.3K0
Haskell Type与Typeclass
我们可以这样解读这个函数的类型:removeNonUppercase这个函数接收一个Char List类型的参数返回一个Char List类型的返回值
Orlion
2024/09/02
2060
基础语法_Haskell笔记1
Haskell是一种纯函数式语言(purely functional programming language),其函数式特性的纯度没有争议
ayqy贾杰
2019/06/12
2.2K0
Haskell 函数语法
guard由跟在函数名及参数后边的竖线标志,通常竖线都是靠右一个缩进排成一列。一个guard就是一个布尔表达式,如果是True,就使用对应的函数体。最后的一个guard往往是otherwise,它的定义就是简单一个otherwise = True。
Orlion
2024/09/02
1700
Python3入门与进阶笔记(一):基本
       python3中的整型只有int,小数只有float.。type函数可以用来查看类型。
py3study
2020/01/10
5600
Monadic Function_Haskell笔记12
只是把context换成了Monad而已,此外没什么区别。并且对于遵守Functor laws和Monad laws的类型,这两个函数是完全等价的,例如:
ayqy贾杰
2019/06/12
9990
1.Python3基础入门学习笔记(一)
在Linux中安装Python3命令,在官网下载 https://www.python.org/downloads/source/
全栈工程师修炼指南
2022/09/28
1K0
1.Python3基础入门学习笔记(一)
Python list列表
1,列表是由一系列元素组成,元素与元素之间可能没有任何的关联关系,但他们之间有先后顺序关系。
py3study
2020/01/10
9300
python 内置、匿名、高阶、递归等函数(3.1)
认识Python自带的, 可全局调用的函数, 避免我们命名冲突导致了函数性状发生改变
友儿
2022/09/28
3610
热爱函数式的你,句句纯正的 Haskell【库函数篇】
本篇是笔记篇,介绍 Haskell 的强大的库函数,也可感受下与我们平常的 js 操作异同之处:
掘金安东尼
2022/09/19
5270
推导式和Lambda表达式
的一种独有特性。推导式最主要的特点就是可以从一个数据序列构建另一个新的数据序列。在Python 中目前常用的推导式有
ruochen
2021/12/04
1K0
Python基础(4)——数组&元组
以中括号([])表示,每个元素以逗号隔开,里面可以存放相同的数据类型也可以存放不同的数据类型。
羊羽shine
2019/05/28
1.6K0
Zipper_Haskell笔记13
数据结构不可变,所以对其进行增、删、改等操作的结果只能是重新创建一份新的数据结构,例如:
ayqy贾杰
2019/06/12
5720
Zipper_Haskell笔记13
Python3学习笔记 | 十二、Python的语句与语法-赋值与表达式
在Python里,赋值语句与其它语言有所不同,它不是直接把相应的值赋给变量,而是把对象的地址赋给变量,让变量可以找到相应的对象,这个叫做对象的引用。 • 赋值语句建立对象引用值。Python赋值可以理解成存储了对象的指针 • 变量名在首次赋值时会被创建。因为变量本身没有类型,所以不需要提前创建 • 变量名在引用前必须先赋值。 • 执行隐式赋值的一些操作。所谓的隐式赋值,就是函数调用、模块倒入、类的定义、for 循环等。
TeamsSix
2019/09/24
9650
Python基础知识总结
WHY Python首先,学一门语言都会问:点解要学这门语言而学Python的原因很简单,原因就是…..好鬼简单.(这句话不是我说的) 很喜欢Python极简的代码风格,以及众多功能强大的模块…… 学了两天Python有点点体会,觉得应该总结一下有哪些应该注意的地方. 基本问题 学习途径 初学者推荐一个公众号:Crossin的编程教室(喜欢作者的教学方式) 环境配置 用Mac或者Linux的同学是幸福的,直接在终端输入idle就好了,这两个系统都是默认自带Python的,如果想直接在终端打开Python S
Locker
2018/08/01
1.6K0
Python基础知识总结
从 Java 和 JavaScript 来学习 Haskell 和 Groovy(DSL)
这是《从 Java 和 JavaScript 来学习 Haskell 和 Groovy》系列的第四篇。
四火
2022/07/19
5980
从 Java 和 JavaScript 来学习 Haskell 和 Groovy(DSL)
python 几个重要函数
lambda argument1, argument2,...,argumentN: expression using arguments
py3study
2020/01/08
6450
热爱函数式的你,句句纯正的 Haskell【表达式篇】
表达式是编程语言中最常用到的基础之一,本片让我们来看看在 Haskell 中表达式是怎样的?
掘金安东尼
2022/09/19
1.2K0
热爱函数式的你,句句纯正的 Haskell【表达式篇】
让Monad来得更猛烈些吧_Haskell笔记11
最早接触过IO Monad,后来又了解了Maybe Monad和List Monad,实际上还有很多Monad(比如Writer Monad、Reader Monad、State Monad等),位于mtl package,可以通过ghc-pkg命令来查看:
ayqy贾杰
2019/06/12
1.6K0
热爱函数式的你,句句纯正的 Haskell【类型篇】
---- theme: github 每次看到干尸鬼鲛起舞,都有一种说不出的难受,不行,发出来,让大家一起难受难受~🐶 Haskell 是一门纯的函数式语言。 也就是说计算机主要是通过函数来完成的(像在数学中一样),而不是通过“先做这个,再做那个”的命令式操作顺序进行的(像在主流的编程语言中一样)。—— Simon Peyton Jones 初见😀 什么是 Haskell ?我们从 wiki 上可以找到以下要点: Haskell 是一种标准化的,通用的纯函数式编程语言,有惰性求值和强静态类型; 在H
掘金安东尼
2022/09/19
1.3K0
热爱函数式的你,句句纯正的 Haskell【类型篇】
相关推荐
learn-haskell
更多 >
LV.1
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档