# Rekursion einer Folge



## Ru$h (29. Mrz 2019)

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?

```
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 (29. Mrz 2019)

Du brauchst die Rekursionsformel eigentlich wirklich nur wortwörtlich abzutippen:

```
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.


----------



## Ru$h (29. Mrz 2019)

httpdigest hat gesagt.:


> Du brauchst die Rekursionsformel eigentlich wirklich nur wortwörtlich abzutippen:
> 
> ```
> float S(int n) {
> ...



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


----------



## httpdigest (29. Mrz 2019)

Dann ist in dem Scope noch irgendwo anders ein Symbol "summe" definiert.


----------



## httpdigest (29. Mrz 2019)

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.


----------

