2012-04-03 98 views
2

因此,我在遞歸的最後部分賦值時遇到了一些麻煩。該方法需要使用遞歸來返回一個由「編織」兩個字符串形成的字符串,並將兩個字符串作爲參數。例如:組合使用遞歸的字符串

weave("aaaa", "bbbb") // should return the string "abababab" 
weave("hello", "world") // should return the string "hweolrllod" 
weave("recurse", "NOW") // should return the string "rNeOcWurse" 

請注意,第一個字符串中的額外字符 - 「urse」中的字符 - 在編織在一起的字符後面。

重要的(和令人討厭的)是我不允許使用任何迭代循環(for,while,do while)。

這裏是我的代碼至今:

public static String weave(String str1, String str2) 
{ 
    String word = str1 + str2; 
    if(str1 == null || str1.equals("") || str2 == null || str2.equals("")) 
    { 
     return word; 
    }    
    String word1 = weave(str1.substring(0, str1.length() - 1), str2.substring(0, str2.length() - 1)); 
    System.out.println(word1); 
    return word; 
} 

對於(你好,世界),我的輸出是:

HW 
HeWo 
HelWor 
HellWorl 
HelloWorld 

顯然,我的字符不織布,所以我不知道該怎麼辦!另外,如上所述,該方法不應該打印。我只是在println聲明中添加了一個測試,以查看我的程序在哪裏。

+0

告訴你的輸出*應該*看起來像 – 2012-04-03 18:20:34

+0

@LiviuT。他們確實在例子的開頭說明預期的最終結果。 – 2012-04-03 18:22:37

+0

@LiviuT。查看第一個代碼塊的評論。 – 2012-04-03 18:23:49

回答

5

我覺得像下面這樣的東西可能會起作用。

public String weave(String str1, String str2) 
{ 
    if(str1.isEmpty() || str2.isEmpty()) { 
    return str1 + str2; 
    } 
    return str1.substring(0, 1) + str2.substring(0, 1) + weave(str1.substring(1), str2.substring(1)); 
} 

的想法很簡單:你只需要從與剝離輸入字符串遞歸調用函數彈出從兩個輸入字符串的第一個字符並連接字符和返回的值,直到輸入字符串之一是在這種情況下,你應該只返回非空字符串。

weave("abcdef", "12"): "a" + "1" + weave("bcdef", "2") 
    | 
    +- weave("bcdef", "2"): "b" + "2" + weave("cdef", "") 
     | 
     +- weave("cdef", ""): "cdef" 

,導致:

weave("abcdef", "12"): "a" + "1" + "b" + "2" + "cdef": "a1b2cdef" 
0

與您的代碼的問題是:

String word = str1 + str2; 
//... 
return word; 

無論怎麼遞歸調用,在結束它只是從第一個方法返回結果當你通過「你好」,「世界」時打電話。

String word = str1 + str2; //hello + world 
//... other things and the recursive call doesn't matter 
//return word; //return the first word variable which is helloworld