2012-04-03 69 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