基本规则直接省略
你应该已经知道了总次数是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是多少?
我来告诉你,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