汉诺塔的移动次数怎么算的

基本规则直接省略

你应该已经知道了总次数是2^n-1,但是怎么来的呢?

本篇不涉及代码,只讲公式的由来

 首先,你要把最底部的 “7” 放在 C 上吧

但是!

你要把 “7” 放在 C 上,就必须得先把 “1” ~ “6” 放在 B 上,变成这样省儿的:

假设这一步操作要m次,然后再操作1次把 “7” 移动至 C

记住这个m和这个1,待会儿要考

 

 好了,现在要把 “1” ~ “6” 移到 C 上,

你说,把这 “1” ~ “6” 从 A 移到 B 操作了m次,那把 “1” ~ “6” 从 B 移动到 C 呢?

大声告诉我,要多少次!

当然也是m

那么到目前为止,从头到尾一共花了m+m+1 = 2m+1 

(一定要跟上哦)

现在的问题是,m是多少?

我来告诉你,是把 “1” ~ “6” 从 A 移动到 B 的次数。

我寻思这不是废话吗(你先别急

拆解一下,要把 “1” ~ “6” 从 A 移动到 B 首先得把 “1” ~ “5” 移动到C

 

 假设这波操作移动了n

把 “6” 放在 B 上移动1次,然后把 “1” ~ “5” 放 B 上,又花了n

 这个时候我们就算出来了 m = 2n+1 没毛病

那所有的步骤从头到尾一共是移动了 2(2n+1)+1 

接下来,我猜你已经知道怎么操作了

……

一直分解下去,直到只剩最后一个 “1” ,移动 “1” 需要 2×0+1

总次数为:2(2(2(……2(2×0+1)+1……)+1)+1)+1 次

末尾加1再减1:2(2(2(……2(2×0+1)+1……)+1)+1)+2-1

把末尾的2合并进离它最近的那个括号:2(2(2(……2(2×0+1)+1……)+1)+2)-1

 

继续向内合并,一直到没有 “+1” 变成:2(2(2(2(2……(2×0+2)……))))-1

出来了,2^n-1

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bu_lng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值