Peano Algorithmus: Rekursion, Verständnissfrage

Gast #7224446
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
}
(Firma: Golden Delicious Computers)
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);

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.