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]