Beschouw de lijst $$t$$, bestaande uit $$N$$ natuurlijke getallen. Elk van die tellers kan een waarde tussen 1 en $$n-1$$ aannemen (grenzen inbegrepen). De lijst $$t$$ kan als getal in het $$n$$-tallig stelsel geïnterpreteerd worden. Voor $$n = 10$$ en $$t = [1, 2, 3, 4]$$ komen we aldus tot het decimale getal 1234, voor $$n = 2$$ en $$t = [0, 1, 0, 1, 1]$$ tot het bitpatroon 01011, voor $$n = 3$$ en $$t = [2, 2, 1, 2]$$ het patroon 2212 in het 3-tallig stelsel.
We definiëren de opvolger van de lijst $$t$$ als de lijst die geïnterpreteerd kan worden als 1 hoger dan het getal waarmee $$t$$ overeenstemt. Zo is de opvolger van $$t = [1, 2, 3, 4]$$ en $$n = 10$$ gegeven door $$[1, 2, 3, 5]$$, de opvolger van $$t = [0, 1, 0, 1, 1]$$ voor $$n = 2$$ is $$[0, 1, 1, 0, 0]$$, en de opvolger van $$t = [2, 2, 1, 2]$$ voor $$n = 3$$ is $$[2, 2, 2, 0]$$. Verder definiëren we de opvolger van $$[n-1, n-1, ..., n-1]$$ als $$[0, 0, ..., 0]$$.
Schrijf de functie opvolger() met als argumenten:
LET OP: Je code mag geen lusconstructies bevatten (geen for- of
while-lussen en ook geen comprehensions), en moet dus recursief geschreven worden.
l = [1, 2, 3]
for i in range(10):
print(l)
opvolger(l, 4)
#[1, 2, 3]
#[1, 3, 0]
#[1, 3, 1]
#[1, 3, 2]
#[1, 3, 3]
#[2, 0, 0]
#[2, 0, 1]
#[2, 0, 2]
#[2, 0, 3]
#[2, 1, 0]
l = [4, 4, 3]
for i in range(5):
print(l)
opvolger(l, 5)
#[4, 4, 3]
#[4, 4, 4]
#[0, 0, 0]
#[0, 0, 1]
#[0, 0, 2]