Hmm... mit meinem Beispiel bin ich evtl etwas über's Ziel
hinausgeschossen und mag einen Anfänger überfordern, deshalb hier ein
etwas zugänglichere Version der Funktion foo. Die Endrekursion, die
hier nicht Thema ist, wurde durch eine Schleife ersetzt und es werden
sprechende Namen benutzt:
1 | void
|
2 | grossklein(char *str, int ab_pos, int wieviele)
|
3 | {
|
4 | if (wieviele > 0)
|
5 | for (int i = ab_pos; str[i]; i++)
|
6 | {
|
7 | str[i] ^= 0x20;
|
8 | printf("%s\n", str);
|
9 | grossklein(str, i+1, wieviele-1);
|
10 | str[i] ^= 0x20;
|
11 | }
|
12 | }
|
Die Rekursion ist klar zu erkennen und mit etwas Überlegung wird
deutlich, dass durch sie bis zu wieviele Schleifen gleichzeitig
aktiv sind.
Übung: Die Funktion so abändern, dass nur Strings, die exakt wieviele
Zeichen geändert haben, ausgegeben werden.