Fibonacci Rekursion

Samsu

Grünschnabel
Hallo ihr!

Habe folgende Aufgabe:

Erstellen Sie eine Funktion zur Berechnung des n-ten Gliedes der Fibonacci-Folge.

a) Nutzen Sie einen globalen Zähler.
b) Nutzen Sie eine lokale statische Zählvariable.
c) Modifizieren Sie Ihr Programm so, dass mittels Präprozessor-Direktive entschieden werden kann, welche Ihrer Lösungen – a) oder b) – kompiliert wird.

Rahmenbedingung: Die Ausgaben Ihres Programmes sollen mittels Ihrer Lösung aus Aufgabe 3a) geschehen.

bei 3a steht: Erstellen Sie ein Programm, welches aus der main-Funktion eine Funktion void meine_ausgabe_rekursiv(int Zahl) zur rekursiven Ausgabe einer natürlichen Zahl auf der Standardausgabe aufruft.

Bisher dachte ich, folgende Aufgabe so lösen zu können:
Mein Ansatz wäre 2 Funktionen zur Berechnung der Fibonacci Zahlen, eine mit globaler Variable, die andere Funktion mit statistischer lokalen Variable.
Ich weiß, dass eine lokale Variable außerhalb nicht mehr sichtbar ist und eine globale Variable außerhalb der Funktion definiert ist und für alle Funktionen sichtbar ist.
Allerdings weiß ich nicht, wie ich dann die 2 Funktion schreiben muss, da eine globale Variable ja außerhalb deren definiert ist?

C#:
#include<stdio.h>

unsigned int fibonacci_lokal(unsigned int n)
{
    if (n <= 1) {
        return n;
    }
    else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

unsigned int fibonacci_global(unsigned int n)
{
//hier ist fraglich was hin muss
}

void main() {

    int i = 0;

    printf("Geben Sie eine Zahl ein, von der die Fibonacci-Zahl berechnet werden soll: ");
    scanf("%i", &i);

    printf("Mit welcher Variante wollen sie die Fibonacci-Zahl ermitteln?\n");
    printf("Druecken sie die 1 um sie mit einer lokalen Variable\nDruecken sie die 2 fuer die Berechnung  durch eine gloable Variable\n");
    scanf("%d", &a);

    if (a == 1)
    {
        printf("Die Fibonacci-Zahl von %i lautet: %i\n", i, fibonacci_lokal(i));
    }

    if (a == 2)
    {
        printf("Die Fibonacci-Zahl von %i lautet: %i\n", i, fibonacci_global(i));
    }
}

Wäre über jede Hilfe froh, danke!
 

Technipion

Erfahrenes Mitglied
Hallo Samsu,
der Thread ist schon als gelöst markiert, hast du das Problem mittlerweile gelöst?

Ich weiß, dass eine lokale Variable außerhalb nicht mehr sichtbar ist und eine globale Variable außerhalb der Funktion definiert ist und für alle Funktionen sichtbar ist.
Genau. Globale Variablen sind "global" sichtbar, also von jedem Scope des Moduls aus. Eine globale Variable anzulegen ist denkbar einfach: Leg einfach im Quellcode nach den ganzen #include Direktiven ein int g_variable; an. (In der Regel macht man globale Variablen kenntlich, z.B. durch ein vorangestelltes g_ )

Deine Funktion fibonacci_local nutzt einen rekursiven Ansatz. Bist du sicher, dass du das so haben möchtest? Grund: Du brauchst so keine Zählvariable. Aber laut b) sollst du ja eine lokale statische (nicht statistische) Zählvariable benutzen :oops:

Gruß Technipion
 

Samsu

Grünschnabel
Leider nicht gelöst, war ein Fehler, sorry! Ja, Rekursion ist das Thema der Einheit, also passt das! Ich wüsste allerdings nicht, wie ich dann weiter verfahren soll, nachdem ich die globale Variable deklariert habe. Danke.
 

ComFreek

Mod | @comfreek
Moderator
Ich wüsste ehrlich gesagt auch nicht, wie man eine globale oder lokal-statische Variable sinnvoll bei Fibonacci einsetzen sollte außer zum Zwecke des Cachens, aber das ist hier wohl nicht gewollt. o_O