Я постараюсь вам это объяснить, а не дать быстрый ответ. Похоже, у вас есть все базовые случаи, и ваша проблема может быть исправлена с помощью нескольких небольших настроек:
Я думаю, что основная проблема с вашим кодом заключается в том, что вы не печатаете / не создаете новый вывод каждый раз. рекурсивный вызов - ваши рекурсивные вызовы просто каждый раз добавляются к одной и той же строке. Вы можете сказать, что вам нужно что-то напечатать при каждом рекурсивном вызове, потому что ваш идеальный вывод показывает не только конечную строку, но и приращения между ними.
Итак, при каждом рекурсивном вызове вы распечатываете свой результат так far, а затем передать этот промежуточный результат следующему рекурсивному вызову. Это означает, что ваш метод должен принимать параметр (или 2), который до сих пор будет результатом (аккумулятор)
Теперь вопрос в том, как выглядит промежуточный результат? Это будет то, что будет меняться между каждым выходом, то есть «comp перед« u »и« tings »после. Таким образом, вы можете передать строковые параметры «до» и «после» (которые будут пустыми строками при первом вызове), которые на данный момент содержат строку из comp и ting.
Затем при каждом вызове вам просто нужно добавить 'comp' к строке before, 'ting' к строке after, распечатать все это с 'u' в середине (перед + ' u '+ after), а затем передать строки new before и after рекурсивному вызову
Edit после дальнейшего уточнения: делать это без аккумулятора :
Если вам нужно выполнить sh это без аккумулятора, это немного сложнее:
- Базовым случаем должно быть «вычисление» вместо «u»
- Для не базового случая сначала выполните рекурсивный вызов (т.е. вызовите метод с n-1) и сохраните его как строку (скажем,
recc_result
) - Разделите рекурсивный результат по новой строке
\n
и вытащите из него последнюю строчку. Это можно сделать, используя recc_result.split()
, а затем взяв последний элемент массива. Назовите это last_line
- Наконец, верните
recc_result + '\n' + 'comp' + last_line + 'ting'
Объяснение:
Изменение базового случая связано с тем, что вы хотите напечатать «вычисление», когда n = 1, а не только «u».
Остальное можно понять так, что на каждом этапе вы берете последнюю строку из результата и добавляете «comp» к front и «ting» в конце, затем прикрепив это к результату.
Итак, базовый случай - «вычисление». Затем для n = 2 мы получаем рекурсивный результат для n-1 (который равен 1), который дает нам «вычисления». Последняя строка из этого результата является единственной строкой (т.е. «вычисление»). Затем мы добавляем "comp" и "ting" и присоединяем их ко всему результату, давая нам "вычисление \ nкомпьютерные вычисления".
Для n = 3 recc_result - это "computing \ ncompcomputing", из которого мы берем последнюю строку ("compcomputingting"), а затем добавляем вычисление и ting "compcompcomputingting" и присоединяем его ко всему результату, давая "вычисления \ nкомпьютерные вычисления \ nкомпьютерные вычисления"
Примечание: \n
= новая строка