参考正常的汉诺塔问题(3根柱子),现在变成4根。
把n个盘子从A移动到D上至少需要多少步?
输入:没有输入 输出:输出12行,第i行是i个盘子至少需要几步
正常3根柱子的汉诺塔递推公式是three[i]=three[i-1]*2+1
,其中three[i]代表i个盘子至少需要多少步。
现在多了一根柱子,我们可以选择先把n个盘子中最上面的j个从A移动到B上(可用4根柱子),再把下面的n-j个盘子从A移动到D上(不能用柱子B,相当于3根柱子),再把B上的j个盘子移动到D上(可用使用4根柱子)
用four[i]代表i个盘子从A到D的最小次数,four[i]初始值“无穷大”,four[0]=0(0个盘子移动步数至少为0),递推公式four[i]=min{four[j-1]*2+three[i-j]}
,其中j是0~i的正整数。
代码如下: