Iterativ und Rekursiv

BasicC

Erfahrenes Mitglied
Die Aufgabe :

Schreiben Sie ein Programm mit zwei Funktionen zur Berechnung der Fakultät einer na- türlichen Zahl, die von der Eingabe gelesen wird. Die eine Funktion soll die Fakultät mit einem iterativen Algorithmus berechnen, die andere Funktion soll dies rekursiv ausfüh- ren.

n n−1
n! = ∏i = n⋅∏i = 1⋅2⋅3⋅4⋅...⋅n und 0! = 1

i=1 i=1




ich weiss ungefähr das ich zwei schleifen brauche

int zahlen ..

printf ....
scanf ...

doch wie strukturiere ich es ?
 

Technipion

Erfahrenes Mitglied
Ohje Tikorz,
du hast dich neulich in dem Historgramm-Thread nicht gerade mit Ruhm bekleckert. Und das hier macht schon wieder den "ich will eine fertige Lösung"-Eindruck. Aber nungut, schauen wir uns erst einmal an, wie es im Moment mit dem Problem steht.
Funktionen zur Berechnung der Fakultät
Hast du dich schon über die Fakultätsfunktion informiert (z.B. bei Wikipedia)? Dort findet man u.a. sogar Pseudocode für die beiden Varianten der iterativen und rekursiven Berechnung :rolleyes:...
ich weiss ungefähr das ich zwei schleifen brauche

int zahlen ..

printf ....
scanf ...
Das ist doch schonmal ein Anfang. Wie ist dein aktueller Code?
einer na- türlichen Zahl, die von der Eingabe gelesen wird.
Fang doch mal damit an. Zunächst musst du ja wissen, von welcher Zahl du die Fakultät berechnen sollst...

Gruß Technipion
 

cwriter

Erfahrenes Mitglied
ich weiss ungefähr das ich zwei schleifen brauche
Du brauchst eine, nicht zwei.
Der Unterschied zwischen Iteration und Rekursion scheint dir nicht bewusst zu sein:
Iteration ist im Prinzip einfach eine Schleife. (lat. "iter" ist "Weg", in diesem Kontext die "Begehung", also Schritt für Schritt zu rechnen).
Rekursion (lat. recurrere, "wieder rennen, zurückrennen") bedeutet, dass eine Funktion sich selbst direkt oder indirekt wieder aufruft.

Als Beispiel:
Die Summe der ersten n Zahlen berechnen:
C:
int iterative(int n)
{
int sum = 0;
for(int i = 0; i < n; ++i) {
sum += i;
}
return sum;
}

int recursive(int n)
{
if(n == 0) return 0;
return n + recursive(n-1);
}

Wie du es strukturieren musst...

Du musst zwei Funktionen basteln, die die Fakultät berechnen. Zeig erstmal das, dann kümmern wir uns um die Darstellung.

(Ich habe dich im Verdacht, wieder ein bisschen Schlaumeiern zu wollen. Jetzt gibt es nur noch Vorkasse)

Unf schon war jemand schneller:
Und das hier macht schon wieder den "ich will eine fertige Lösung"-Eindruck.
Dem stimme ich zu.

cwriter
 
Zuletzt bearbeitet:

BasicC

Erfahrenes Mitglied
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//iterativ
void iterativ (){;
    int fakultaet(int n);
    int summe = 1;
        for(int i = 2;i<=n;i++)
            summe *= i;
        return summe;
    }
//rekursiv
        int fakultaaet( int n)
        {
            if( n == 1)
                return 1;
            return n * fakultaet(n-1);
        }

Mein Code sah so aus aber es funktioniert nicht habe auch gerade den Code von cwriter benutzt und der klappt auch nicht leider :/ ich weiss nicht wieso
 

BasicC

Erfahrenes Mitglied
Apple Mach-O Linker (ld) Error Group

"_main", referenced from:
clang: error: linker command failed with exit code 1 (use -v to see invocation)


Das zeigt Xcode an

Ein Fehler den ich nicht verstehe
 

BasicC

Erfahrenes Mitglied
Code:
#include <stdio.h>

#include <stdlib.h>

#include <math.h>



int iterative(int n)

{

    int sum = 0;

    for(int i = 0; i < n; ++i) {

        sum += i;

    }

    return sum;

}



int rekursive(int n)



printf("Geben Sie die Fakultät an:",i);

scanf("%d",i);



{

    if(n == 0)

        return 0;

    return n + rekursive(n);

}

Kann ich das so machen ?
also irgendwie muss ich die Zahl selber eingeben ..
 

cwriter

Erfahrenes Mitglied
Kann ich das so machen ?
also irgendwie muss ich die Zahl selber eingeben ..
Ne das geht so nicht. Du brauchst mindestens 10 Leerzeilen zwischen den Codezeilen, sonst ist der Compiler verwirrt.

"_main", referenced from:
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Und was heisst das wohl? Du kompilierst eine ausführbare Datei.
Wo beginnt die Ausführung?
Beim Einstiegspunkt, in der Regel der int main().

Und die Meldung sagt uns, dass der Einstiegspunkt nicht gefunden wird.
Also fehlt die main(), und dazu noch die korrekte Syntax.

cwriter
 

BasicC

Erfahrenes Mitglied
Code:
#include <stdio.h>

#include <stdlib.h>

#include <math.h>



    int iterative(int n);

{

    int sum = 0;

    for(int i = 0; i < n; ++i) {

        sum += i;

    }

    return sum;





    int rekursive(int n);





    if(n == 0){

        return 0;

        return n + rekursive(n);

    }



int main ()

printf("Bitte Fakultät eingeben: ");

scanf("%d", &n);

printf("iterativ ergebnis: %d\n", int iterative(int n));

printf("rekursiv ergebnis: %d\n", int rekursive(int n));

   

}

irgendwie kriege ich es nicht hin -.-
 

cwriter

Erfahrenes Mitglied
irgendwie kriege ich es nicht hin -.-
Das Thema ist jetzt als erledigt markiert. Hast du es hingekriegt?

Aber mal Klartext: Du würfelst hier Zeilen zusammen, die erstens niemand lesen kann, weil man sich in die Unendlichkeit scrollen muss, und du hast unter anderem wegen der Leerzeilen etwa 0.0% Struktur in deinen Programmen. Dann nimmst du einen Hinweis, kopierst ihn direkt irgendwo in den Code, der Compiler beschwert sich, und du machst gleich auf "Oh nein, der Compiler hat nein gesagt. Ich will auch keine Zeit damit verschwenden, also schreibe ich es mal ins Forum und jemand kann den Müll dann zusammenwischen".

Wenn sich das nicht bald bessert, bekommst du irgendwann gar keine Antworten mehr. Ich persönlich fände es jetzt angenehmer, ein bisschen was selbst zu machen und eingeschränkte (= keine Komplettlösung) Hilfe zu haben, statt alles selbst machen zu müssen, aber der Ball liegt bei dir.

cwriter