获得河内塔楼的移动次数

时间:2017-05-26 00:28:35

标签: java towers-of-hanoi

鉴于此方法,

public static String solve(int n, String start, String middle, String end)

我想要返回移动次数。我可以通过以下代码获得这个:

public static String solve(int n, String start, String middle, String end) {
    if (n == 1) {
        return Integer.toString(1);
    }
    return solve(n - 1, start, end, middle) + solve(n - 1, middle, start, end) + 1;
}

但是当我给1个磁盘时答案是1,当我给2个磁盘时答案是111,当我给3个磁盘时答案是1111111,4个是111111111111111,依此类推。每个字符串中1的数字代表一个移动,但我不想要1,我想要1,3,7,15等等。我怎样才能改变这段代码让我得到后面的数字呢?

1 个答案:

答案 0 :(得分:2)

三种可能的解决方案:

  • solve更改为返回int;首先将return更改为return 1;
  • 仅保留solve,但在变量String中抓取结果s并打印s.length()而不是s本身;
  • 丢弃solve并使用公式Math.pow(2, n) - 1;