Rekursion einer Folge

Ru$h

Aktives Mitglied
Hallo,

ich versuche folgende Rekursion zu implementieren, aber ich scheitere daran.
Die Rekursionsvorschrift ist S_n= S_(n-1)+1/n, S_0=0
Kann jemand mir den Fehler aufzeigen und berichtigen?
C:
int main()
{

  float y = (float)5;
  int x = 5;
  y = summe(x);
  printf("\nResult: sum(%d)=%f\n", x, y);
  return 0;

}

static int depth = 0;

float summe(int x) {
    depth++;
    printf("BEG %d x: %d \n", depth, x);
    float y = (float)x;
    if(x>1) {
            y = (float)1/(float)x+summe(x-1);
    }
    printf("END %d sum(%d)=%f \n", depth, x, y);
    depth--;
    return y;
    }
 

httpdigest

Top Contributor
Du brauchst die Rekursionsformel eigentlich wirklich nur wortwörtlich abzutippen:
C:
float S(int n) {
  return n > 0 ? S(n - 1) + 1.f / n : 0;
}

EDIT: Davon abgesehen, ist deine Implementierung doch korrekt? Was meinst du genau mit, du schaffst es nicht? Funktioniert doch.
 
Zuletzt bearbeitet:

Ru$h

Aktives Mitglied
Du brauchst die Rekursionsformel eigentlich wirklich nur wortwörtlich abzutippen:
C:
float S(int n) {
  return n > 0 ? S(n - 1) + 1.f / n : 0;
}

EDIT: Davon abgesehen, ist deine Implementierung doch korrekt? Was meinst du genau mit, du schaffst es nicht? Funktioniert doch.

Nein, bei meiner Funktion float summe steht immer "error: conflicting types for 'summe'". Das verstehe ich nicht
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
Nachtrag: Hast du schonmal nach der Fehlermeldung gegooglet, bzw. ge-stackoverflow-t? :)
https://stackoverflow.com/questions...ng-types-for-function-in-c-why#answer-1549636

In C muss man alle Symbole, die man verwendet, vorher ("oberhalb" der Benutzungsstelle) deklarieren. Anders als bei Java. Schiebe einfach deine main-Funktion unterhalb von der summe-Funktion. Dann geht's.

"conflicting types" deshalb, weil in C ein nicht-deklariertes aber verwendetes Symbol per Default den Typ `int` bekommt.
 

Ähnliche Java Themen

Neue Themen


Oben