获得数河内

问题描述:

鉴于这种方法的塔移动,获得数河内

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等等。我如何改变这段代码让我得到后面的数字?

+0

如果你想要的结果设置为*号的移动*,为什么是返回类型的'String'? 'int'不会更好吗? - 既然你不用'start','middle'和'end'来做什么,为什么他们在那里? – Andreas

三种可能的解决方案:

  • 变化solve返回INT;改变第一returnreturn 1;
  • 离开solve独自一人,但捕捉变量s产生的String和打印s.length(),而不是s本身;
  • 扔掉solve,只是用公式Math.pow(2, n) - 1;
+0

我不知道如何实现第二种方法。我试过了,它不会改变任何东西 – kprog

+0

'Sting s = solve(5,“”,“”,“”);的System.out.println(s.length());' –