2012-04-03 5 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» Придите после символов, которые были сплетенные вместе.

Важной (и раздражающей) вещью является то, что мне не разрешено использовать любые итерационные петли (пока, пока).

Вот мой код до сих пор:

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

сообщает, что ваш выход * должен выглядеть так: –

+0

@LiviuT. Вначале они приводят ожидаемый конечный результат в примерах. –

+0

@ LiviuT. См. Комментарии первого кодового блока. –

ответ

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)); 
} 

Идея довольно проста: вам нужно только чтобы вытолкнуть первый символ из двух входных строк и конкатенации как символы и возвращенное значение из вызова функции рекурсивно зачищенных входных строк, пока один из входных строк empty в таком случае вам нужно просто вернуть непустую строку.

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 
Смежные вопросы