Forum: PC-Programmierung Peano Algorithmus: Rekursion, Verständnissfrage


von Brränko (Gast)


Lesenswert?

Hi zusanmen,

ich versuche den Peano Algorithmus in C zu verstehen:

https://rosettacode.org/wiki/Peano_curve

Die Funktion Peano() ruft sich selbst auf, hat aber mehrere Aufrufe von 
sich selbst im Funktions-Rumpf.

Für mein Verständnis wird immer nur die erste Peano Funktion ausgeführt, 
kann aber nicht die ganze Wahrheit sein ;)

Der erste Aufruf sieht so aus:
1
Peano(0, 0, 1000, 0, 0);

Kann mir jemand auf die Sprünge helfen, wie der Algorithmus startet?

Hier noch die Peano Funktion:
1
void Peano(int x, int y, int lg, int i1, int i2) {
2
  if (lg == 1) {
3
    lineto(3*x,3*y);
4
    return;
5
  }
6
  
7
  lg = lg/3;
8
  Peano(x+(2*i1*lg), y+(2*i1*lg), lg, i1, i2);
9
  Peano(x+((i1-i2+1)*lg), y+((i1+i2)*lg), lg, i1, 1-i2);
10
  Peano(x+lg, y+lg, lg, i1, 1-i2);
11
  Peano(x+((i1+i2)*lg), y+((i1-i2+1)*lg), lg, 1-i1, 1-i2);
12
  Peano(x+(2*i2*lg), y+(2*(1-i2)*lg), lg, i1, i2);
13
  Peano(x+((1+i2-i1)*lg), y+((2-i1-i2)*lg), lg, i1, i2);
14
  Peano(x+(2*(1-i1)*lg), y+(2*(1-i1)*lg), lg, i1, i2);
15
  Peano(x+((2-i1-i2)*lg), y+((1+i2-i1)*lg), lg, 1-i1, i2);
16
  Peano(x+(2*(1-i2)*lg), y+(2*i2*lg), lg, 1-i1, i2);
17
}

von Nikolaus S. (Firma: Golden Delicious Computers) (hns)


Lesenswert?

Brränko schrieb:
> void Peano(int x, int y, int lg, int i1, int i2) {
>   if (lg == 1) {

Hier würde ich lg <= 1 schreiben. Sicherheitshalber...

>     lineto(3*x,3*y);
>     return;
>   }
>
>   lg = lg/3;

Vermutlich muss der erste Aufruf lg eine Potenz von 3 sein, sonst endet 
die Rekursion nicht weil man bei lg == 0 landen kann.

>   Peano(x+(2*i1*lg), y+(2*i1*lg), lg, i1, i2);

Wenn die Rekursion des ersten Aufrufs endet, geht es hier weiter:

>   Peano(x+((i1-i2+1)*lg), y+((i1+i2)*lg), lg, i1, 1-i2);
>   Peano(x+lg, y+lg, lg, i1, 1-i2);

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.