В псевдокод (ну, Python на самом деле, но это как можно ближе к псевдо-код, как настоящий язык получает):
def recurse (pref,suff):
# If no characters left, just print prefix.
if suff == "":
print pref
return
# Otherwise add lowercase of first suffix letter to prefix
# and recur with that and the remainder of the suffix.
# Then do the same for uppercase.
# If you wanted smarts, this is where you'd detect if the
# upper and lower were the same and only recurse once.
recurse (pref + suff[0:1].lower(), suff[1:])
recurse (pref + suff[0:1].upper(), suff[1:])
# Test the function with "Ben".
recurse ("","beN")
Это выходы:
ben
beN
bEn
bEN
Ben
BeN
BEn
BEN
Как это работает относительно проста (наиболее рекурсивные решения когда вы их понимаете).
Исходное условие - это когда у вас нет префикса и суффикса, который вам нужно перебрать, чтобы получить всевозможные возможности смешанного футляра.
Условие завершения просто, когда нет букв для выбора двух случаев.
Каждое другое условие, которое вы просто повторяете дважды, один раз с буквой в нижнем регистре и один раз с верхним.
Имейте в виду, что это не будет правильно обрабатывать символы, отличные от альфы, это только покажет вам, как работает логика. Например, для строки «a!» Вы получите четыре строки вывода, даже если «!» то же самое в верхнем и нижнем регистре.
Для правильной обработки, что вы будете использовать:
def recurse (pref,suff):
# If no characters left, just print prefix.
if suff == "":
print pref
return
# Otherwise add lowercase of first suffix letter to prefix
# and recur with that and the remainder of the suffix.
# Then do the same for uppercase.
# We also detect if the upper and lower are the same
# and only recurse once.
if suff[0:1].lower() == suff[0:1].upper():
recurse (pref + suff[0:1], suff[1:])
else:
recurse (pref + suff[0:1].lower(), suff[1:])
recurse (pref + suff[0:1].upper(), suff[1:])
# Test the function with "Ben!!!".
recurse ("","beN!!!")
, который дает только 8 строк вместо 64.
Эквивалент в Java, так как это не домашнее задание, это:
public class test {
public static void recurse (String pref, String suff) {
if (suff.length() == 0) {
System.out.println (pref);
return;
}
String first = suff.substring(0,1);
String rest = suff.substring(1);
if (first.toLowerCase().equals(first.toUpperCase())) {
recurse (pref + first, rest);
} else {
recurse (pref + first.toLowerCase(), rest);
recurse (pref + first.toUpperCase(), rest);
}
}
public static void main(String[] args) {
recurse ("","beN!!!");
}
}
Это своего рода домашнее задание? –
Нет, это для личного проекта :) – Ben