首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >河内哈斯克尔运动次数

河内哈斯克尔运动次数
EN

Stack Overflow用户
提问于 2013-10-27 15:40:51
回答 2查看 236关注 0票数 0

我想知道如何用haskell编写代码,以了解如何为n个“盘”和3根棒(A、B、C)编写多个动作

基箱( N=1):移动A->CSO1运动

归纳案例(N= M+1 ):我将M盘"A“-> "C”移动了1张光盘"A“-> "B”,最后我将M盘从"C“移动到"B”。我以为德码可能是这样的:

代码语言:javascript
运行
复制
numMoveHanoi 0 = 0 
numMoveHanoi 1 = 1 
numMoveHanoi n = m+1 + numMoveHanoi m 
                 where m = n-1

不幸的是,这只适用于numMoveHanoi 2 .Other案例,结果是错误的。我不知道我的递归定义哪里错了。

谢谢大家。

EN

回答 2

Stack Overflow用户

发布于 2013-10-27 17:22:53

好吧,试着把你的英语和你的Haskell排好。

代码语言:javascript
运行
复制
numMoveHanoi {- Base case ( N=1) -} 1
    = {- Movement A --> C so 1 movement -} 1
numMoveHanoi {- Inductive case -} n
    = {- I move M discs "A" ---> "C" -} m
    + {- I move 1 disc "A" ---> "B" -} 1
    + {- I move M discs from "C" to "B" -} numMoveHanoi m
    where {- ( N = M+1 ) -} m = n-1

现在,比较一下numMoveHanoi第一句和第三句中的英语。然后比较numMoveHanoi第一和第三从句中的Haskell。

)作为练习:比较第二和第三从句中的英语。然后比较Haskell在第二和第三条款。这是同一个bug的实例吗?为什么或为什么不?)

票数 5
EN

Stack Overflow用户

发布于 2013-10-29 01:37:59

想一想河内塔的递归解决方案:要解决一个有n个磁盘的塔,将上面的n-1光盘移动到备用平台(numMoveHanoi ( n-1 )),移动第n个磁盘(1),并将n个磁盘顶部的n-1磁盘移动到第n块的顶部(numMoveHanoi (n-1))。那么你的一般情况是:

代码语言:javascript
运行
复制
numMovesHanoi n = numMoveHanoi (n-1) + 1 + numMoveHanoi (n-1)
{- or numMovesHanoi n = 2 * numMoveHanoi (n-1) + 1 -}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19619914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档