2015-12-04 22 views
-3
public class recursiveReverse { 

    public static String reverse(String str){ 
    if (str == null) { 
     return null; 
    } 
    if (str.length() <= 1) { 
     return str; 
    } 
    return reverse(str.substring(1)) + str.charAt(0); 
    } 

    public static void main(String[] args) { 
    reverse("car"); 
    } 
} 

我第一次得到if(str.length()< = 1)返回true,然後我迷路了。我不明白這段代碼的過程。我非常感謝,如果有人可以跟蹤它我

+4

你有沒有嘗試在調試器中通過它? – resueman

+0

是的,它剛剛進行遞歸調用並呆在那裏。沒有太多的幫助,但很有可能有一些更好的方法來實現它,我不知道。 –

+1

理解遞歸的唯一方法是通過迭代迭代,使用紙和鉛筆或在調試器中進行迭代。 –

回答

0

讓我們一次一行。

如果要反轉的字符串爲null,則該方法返回null。

如果字符串的長度反向爲< = 1,則按原樣返回。

如果字符串較長,它將返回從位置1開始的顛倒子字符串,並與字符串的第一個字符連接。

所以: 反向( 「A」) - >一個

反向( 「AB」) - >反向( 「B」)+ 「一」 - > 「BA」

反向( 「ABC」) - >逆( 「BC」)+ A - >反向( 「C」)+ 「b」 + 「一」

1

像其他人指出的那樣,你會很好通過在調試器下面遍歷代碼來提供服務。

下面是用的 「printf的」 代碼:

Test.java =>

public class Test { 

    public static String reverse(String str){ 
    System.out.println("-->str=" + str); 
    if (str == null) { 
     System.out.println("<--str=null"); 
     return null; 
    } 
    if (str.length() <= 1) { 
     System.out.println("<--str=str"); 
     return str; 
    } 
    String result = reverse(str.substring(1)) + str.charAt(0); 
    System.out.println("<--result=" + result); 
    return result; 
    } 

    public static void main(String[] args) { 
    reverse("car"); 
    } 
} 

輸出,Java測試=>

-->str=car 
-->str=ar 
-->str=r 
<--str=str; 
<--result=ra 
<--result=rac 
+0

這是操縱輸出:p。System.out.println(「< - str = str」);應該是System.out.println(「< - str =」+ str); – StackFlowed

0

這是遞歸調用反轉功能,直到字符串的長度達到一個字符。

在上面的情況下,要倒轉的字符串是CAR。 在第一遍它將成爲{反向(AR)+ C} 在第二遍中它將成爲{反向(R)+ A} 在第三傳獲得反向的值(R)爲R

哪樣成爲R + A + C = RAC作爲最終答案。

相關問題