Zum Inhalt springen

Iterativ und Rekursiv


Gast Tikorz

Empfohlene Beiträge

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                     n1
n! = i = ni = 1234⋅...⋅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 ? 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wieso zwei Schleifen?

Überlege dir, wie du die Fakultät überhaupt berechnen kannst.

5! = 5 * 4 * 3 * 2 * 1  

oder

5! = 5 * 4!

 

Kennst du eine Schleifenform, die vielleicht so etwas wie eine Laufvariable hat?

Versuche dein großes Problem (z.B. 5!) in kleinere Probleme zu zerlegen, bis es trivial wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

static long fakIterativ(int n) {

long rc = 1;

/* i=2, da wir bei 1 eine 1 ausgeben*/

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

 rc *= i;

}

return rc;

}

 

static long fakRek(int i){

if (i == 1) { return 1; }

else { return fakRek(i-1) * i; }

}

Bearbeitet von KeeperOfCoffee
Link zu diesem Kommentar
Auf anderen Seiten teilen

#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);
        }

 

Ich habe etwa so irgendwie was versucht aber scheint nicht zu funktionieren :/

Link zu diesem Kommentar
Auf anderen Seiten teilen

	#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main (){
    
	    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);}
}
	

Also der sagt, dass das n nicht deklariert ist und außerdem muss ich irgendwie die Zahl selber eingeben die Fakultuert werden soll

Link zu diesem Kommentar
Auf anderen Seiten teilen

Funktionieren würde so etwas hier:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int funktionA(int parameter_1, int parameter_2, int parameter_3)
{
  return (parameter_1+parameter_3)*parameter_2;
}

int main()
{
  int a=0,b=5,c=6,ergebnis_d=0;
  
  ergebnis_d=funktion(a,b,c);
  printf("%d\n",ergebnis_d);
}

 

Bearbeitet von Mttkrb
Link zu diesem Kommentar
Auf anderen Seiten teilen

	#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));
    
}
	
Bearbeitet von Tikorz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Jede Klammer die du aufmachst, muss auch wieder zugemacht werden. (Und andersrum)

Als Beispiel nimm mal meinen Beitrag von eben. Dort sieht du auch, wie Funktionen definiert werden. Wenn du ein anderes Beispiel möchtest, schau hier: https://de.wikipedia.org/wiki/C_(Programmiersprache)#Funktionen 

Edit: Es bringt nichts, wenn du dir die Lösungen irgendwie zusammenkopierst und dann hoffst, dass es irgendwie läuft. Versuch mal, das geschriebene zu verstehen.

Bearbeitet von Mttkrb
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe es mittlerweile gelöst :) 
ich bedanke mich für die Antworten .

Ich habe eine neue Aufgabe, ich schaue wie weit ich komme und dann wende ich mich nochmal an die Community. Ich versuche mein Bestes zu geben.

Evtl. kann man mir erstmal erklären was getan werden soll .
Ich erstelle erstmal ein neuen Thread.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es ist für keine Seite sinnvoll, dir den fertigen Code zu geben. Du lernst nichts, wir vergeuden Zeit.

Also setz dich doch mal 10-20 Min hin und wiederhole die Basics

http://lmgtfy.com/?q=c+tutorial

 

Zitat

Ich habe es mittlerweile gelöst :) 
ich bedanke mich für die Antworten .

Ich habe eine neue Aufgabe, ich schaue wie weit ich komme und dann wende ich mich nochmal an die Community. Ich versuche mein Bestes zu geben.

Evtl. kann man mir erstmal erklären was getan werden soll .
Ich erstelle erstmal ein neuen Thread.

Wir sind nicht hier um deine Hausaufgaben zu machen ...

Du weißt sicherlich nicht, wieso dein Code nicht funktioniert hat, oder?

Bearbeitet von KeeperOfCoffee
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...