2017-05-26 90 views
-3

鑑於這種方法的塔移動,獲得數河內

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

回答

2

三種可能的解決方案:

  • 變化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());' –