In [7]:
def generate_seed(levels):
    if levels < 1:
        raise ValueError("generate_seed() called with levels < 1")
    if levels == 1:
        return [1, 2]
    
    prev_seed = generate_seed(levels - 1)
    mid = len(prev_seed) // 2 
    cur_seed = []
    sum_ = 1 + 2 ** levels
    for i, val in enumerate(prev_seed):
        cur_seed.extend([val, sum_ - val] if i < mid else [sum_ - val, val])
    return cur_seed

for i in range(1, 5 + 1):
    print(i, generate_seed(i))
1 [1, 2]
2 [1, 4, 3, 2]
3 [1, 8, 4, 5, 6, 3, 7, 2]
4 [1, 16, 8, 9, 4, 13, 5, 12, 11, 6, 14, 3, 10, 7, 15, 2]
5 [1, 32, 16, 17, 8, 25, 9, 24, 4, 29, 13, 20, 5, 28, 12, 21, 22, 11, 27, 6, 19, 14, 30, 3, 23, 10, 26, 7, 18, 15, 31, 2]