I tried to write BRGC recursively. I've really recognized that intrinsic of recursion helps for some problems in which I think BRGC is included. is the way I wrote it recursively adequate solution? Can it be improved w.r.t recursion?
Do both methods have same complexity Theta(n), right?
T(n) = T(n-1) + n, T(n) = T(n/2) + n respectively.
import java.util.ArrayList;
import java.util.List;
class Test {
public static void main(String[] args) {
System.out.println(genGray(List.of("0", "1"), 3));
System.out.println(genGrayV2(List.of("0", "1"), (int)Math.pow(2, 3)));
}
public static List<String> genGray(List<String> list, int n) {
if (list.size() == (int)Math.pow(2, n+1))
return list;
List<String> combinedList = new ArrayList<>();
for (String elem : list) {
combinedList.add("0" + elem);
}
for (String elem : list) {
combinedList.add("1" + elem);
}
return genGray(combinedList, n);
}
public static List<String> genGrayV2(List<String> list, int n) {
if (n == 1)
return list;
List<String> combinedList = new ArrayList<>();
for (String elem : list) {
combinedList.add("0" + elem);
}
for (String elem : list) {
combinedList.add("1" + elem);
}
return genGray(combinedList, n / 2);
}
}