Если я правильно понимаю, вас попросят вывести двоичное представление всех чисел меньше 2 ^ n, которое не содержит 2 последовательных 1. Вы можете перефразировать его как все строки из 1 и 0 длиной n, без «11».
Чем вы можете рассматривать это как дерево, где вы выводите его символ за символом, где выпереходите после 0 (чтобы попробовать 0 и 1), но не переходите после 1.
Не уверен, что лямбды, как в java, помогают в ускорении этого.
Но вы можете попытаться решитьэто рекурсивно, что должно привести вас к функциональной реализации.
Например (нет претензий на оптимальность):
public class Ex {
public static void main(String[] args) {
printAllStrings(3);
}
public static void printAllStrings(int length) {
printAllStrings("0", length);
printAllStrings("1", length);
}
public static void printAllStrings(String prefix, int length) {
if (prefix.length() == length) {
System.out.println(prefix);
} else {
printAllStrings(prefix + "0", length);
if (prefix.endsWith("0")) {
printAllStrings(prefix + "1", length);
}
}
}
}