also ich soll im Zuge eine Programmierpraktikums für die Uni ein prog schreiben, das eine Zahlenfolge ausgibt.
Dabei sind die ersten beiden Zahlen vorgegebenermaßen 1 und 1
Die nächste Zahl erhält man nun, indem man die beiden letzten Zahlen nimmt, ihren Wert von der noch leeren Stelle rückwärts zählt, und die dort stehenden Zahlen addiert.
Also:
1 1 x
zweimal 1 rückwärts ergibt jeweils 1, 1+1=2 also x=2
1 1 2 x
einmal 2 und einemal 1 rückwärts ergibt 1 und 2, zusammen 3
1 1 2 3
und so weiter.
Iterativ hab ich die aufgabe bereits gelöst. Das Problem is nu dass ich die Aufgabe jetzt rekursiv lösen muss.
Dabei hab ich Probleme mit dem Speicher, da ich ja einen Array anlegen muss, aber die erforderliche Größe bis zum Start der Funktion nicht bekannt ist. Außerdem habe ich keinen Zugriff auf die verwendete main() nur auf die Subfunktion.
malloc is schon klar. Das Problem is, ich will den Speicher ja nur beim ersten durchlaufen der Funktion allokieren. Aber sobald ich malloc in eine if-Schleife packe beendet die von mir geschriebene main() schon nach dem einlesen von n. Also der Variablen, die die größe des Arrays angibt.
C-Quellcode
- #include <stdio.h>
- #include <stdlib.h>
- int *reihe,x=2;
- int qRekursiv(int n)
- {
- if (x==2){
- reihe=malloc(sizeof(*reihe)*n);
- if (reihe==NULL){
- return 0; //Rückgabe im Fehlerfall
- }
- reihe[0]=1;
- reihe[1]=1;
- }
- reihe[x]=reihe[x-reihe[x-1]]+reihe[x-reihe[x-2]]; //Berechnung der aktuellen Zahl
- printf("%4i", reihe[x]); //Trace zum beobachten der Berechnung
- if (x==n-1){
- return reihe[x]; //Rückgabe des gewünschen Ergebnisses
- }
- x++; //Weiter zählen
- qRekursiv(n);
- }
- int main()
- {
- int n,q;
- printf("Geben sie ein n ein: ");
- scanf("%i", &n); //Einlesen der Größe
- q=qRekursiv(n);
- if (q==0){ //Reaktion auf Speichermangel
- printf("Der Speicher reicht nicht aus, um eine so grosse Zahl zu berechnen.");
- return 1;
- }
- printf("\nDie %i-te Q-Zahl lautet: %i", n, q);
- return 0;
- }
Speziell bei diesem Beispiel wird die Berechnung zwar durchgeführt und ist auch richtig, aber der Rückgabewert ist trotzedem 0... warum auch immer...
Wenn ich malloc nicht in die if-Schleifen packe, wird natürlich bei jedem Durchlauf der Speicher neu allokiert und mein Ergbnis lautet 0.
Momentan habe ich also die Wahl zwischen: Array bei jedem Durchlauf löschen, Funktion garnicht erst starten und korrekt Rechnen aber fälschlicherweise 0 bekommen oO...
Hoffe ihr könnt mir helfen. Ich hab nicht den blassesten Schimmer was ich noch versuchen könnte.
greetz Chais
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Chais ()