2017-10-11 47 views
0

我正在處理遞歸問題。在編寫請求的代碼之後,我所從事的網站運行帶有不同值的代碼作爲輸入。但是,第一次運行正常,但所有後續運行將第一次運行的返回值與後續每次運行的值連接起來。使用遞歸獲取以前的返回值與新值連接

我也在最後得到堆棧溢出錯誤。

我需要幫助!

下面是代碼:

package com.company; 

import static java.lang.System.*; 

public class Main { 

    public static String returnValue=""; 

    public static void main(String[] args) { 
     repeat("this is fun", 1); 
     out.println(returnValue); 
    } 
    public static String repeat(String s, int i){ 
     if (i==0) { 
      return returnValue; 
     } 
     else{ 
      returnValue+=s; 
      repeat(s,i-1); 
     } 
     return returnValue; 
    } 
} 

任何幫助是極大的讚賞。

+0

嘗試在'main()'中放入'returnValue =「」;''。 –

+0

當我運行代碼時,它只是打印'這很有趣'。這正是你的代碼所做的。 '你期望什麼結果btw? –

+2

提示:'static' .. – 2017-10-11 13:03:40

回答

1

您需要將static returnValue移入該方法。然後您需要通過捕獲由內部遞歸調用返回的字符串來控制結果。

喜歡的東西:

public static String repeat(String s, int i){ 
    String returnValue=""; 
    if (i==0) { 
     return returnValue; 
    } 
    else{ 
     returnValue+=s + repeat(s,i-1); 
    } 
    return returnValue; 
} 

注意:這可能不是等價算法來你打算什麼,但它應該表現出的技術。

public static String repeat(String s, int i){ 
    if (i==0) { 
     return ""; 
    } else { 
     return s + repeat(s,i-1); 
    } 
} 
+0

這樣做!謝謝 – user182162

0

如果您習慣使用表達式:

如果這是正確的解決方案,那麼你可以整理一下

public static String repeat(String s, int i) { 
    return i <= 0 
     ? "" 
     : s + repeat(s, i - 1); 
} 

,你可以擺脫靜態屬性的!