簡體   English   中英

有人可以解釋這個反轉字符串的遞歸 Java 方法嗎?

[英]Can someone explain this recursive Java method that reverses a string?

所以我是一名大三學生,試圖理解遞歸。 我了解一般概念,但不了解它是如何正確實施的。 我發現了這個非常簡單的代碼,但似乎無法理解最后一行(遞歸)是如何工作的。 任何幫助和解釋都會很棒,謝謝! (也快到決賽了,我很緊張)

public static String reverse(String s) {
    if (s.isEmpty())
        return s;
    return reverse(s.substring(1)) + s.charAt(0);
}

遞歸過程使用 substring 逐個刪除字符,因為 substring 采用起始索引,在您的情況下為 1,因此如果我們的字符串是“ABC”,那么“ABC”.substring(1) 那么 substring 將返回“BC” reverse 正在使用 substring 進行處理讓我們的輸入是“abcd”用於反向方法

然后過程將使用反向方法作為遞歸

bcd -> 1st reverse will call with this value
cd -> then reverse will call with cd
d -> then reverse will call with d
"" -> then reverse will call with "" as its blank string so reverse will terminate

一旦反向方法到達 isEmpty 語句,s.charAt(0) 將開始,它將在返回 output 從反向方法的末尾添加,因此它修改了 output

d
dc
dcb
dcba

所以整個過程會喜歡:

input to reverse method :bcd
input to reverse method :cd
input to reverse method :d
input to reverse method : "" empty string
result received from reverse method  
After modified result with return value from reverse method and charAt(0) operation : d
result received from reverse method  d
After modified result with return value from reverse method and charAt(0) operation : dc
result received from reverse method  dc
After modified result with return value from reverse method and charAt(0) operation : dcb
result received from reverse method  dcb
After modified result with return value from reverse method and charAt(0) operation : dcba

為了清楚起見,這里是同一算法的迭代版本,它以遇到順序遍歷字符串的字符,並以相反的順序將它們連接成一個新字符串,交換和:

public static String reverse(String str) {
    String revStr = "";
    for (char ch : str.toCharArray()) {
        revStr = ch + revStr;
    }
    return revStr;
}
public static void main(String[] args) {
    System.out.println(reverse("some text string"));
}

Output:

gnirts txet emos

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM