myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Fakultät C++

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 26.01.14, 21:48   #1
Iliaz
Erfahrenes Mitglied
 
Benutzerbild von Iliaz
 
Registriert seit: Mar 2011
Beiträge: 607
Bedankt: 316
Iliaz ist unten durch! | -1436 Respekt PunkteIliaz ist unten durch! | -1436 Respekt PunkteIliaz ist unten durch! | -1436 Respekt PunkteIliaz ist unten durch! | -1436 Respekt PunkteIliaz ist unten durch! | -1436 Respekt PunkteIliaz ist unten durch! | -1436 Respekt PunkteIliaz ist unten durch! | -1436 Respekt PunkteIliaz ist unten durch! | -1436 Respekt PunkteIliaz ist unten durch! | -1436 Respekt PunkteIliaz ist unten durch! | -1436 Respekt Punkte
Standard Fakultät C++

Mag mir jemand bitte erklären was an folgenden Stellen geschieht und der Code ganz genau beschreibt bzw. macht? Ich habe die entsprechenden Stellen markiert. Es geht um die Berechnung der Fakultät und ich stecke in diesem Bereich fest. Ich erfreue mich über jede hilfreiche Antwort.


#include <iostream>
using namespace std;

int fakultaet(int zahl) {
if (zahl <= 1) { // Falls zahl kleiner gleich 1
return 1; // Hier
}

return fakultaet(zahl - 1) * zahl; // Hier
}

int main() {

int zahl;

cout << "Bitte Zahl eingeben: ";
cin >> zahl;
cout << "Die Fakultät von " << zahl << " ist " << fakultaet(zahl) << " !";

cin.sync();
cin.get();
return 0;
}
__________________
Kansas City Shuffle? "Ein Kansas City Shuffle ist, wenn alle Welt nach rechts kuckt, während du links rum gehst."
Iliaz ist offline   Mit Zitat antworten
Ungelesen 26.01.14, 23:33   #2
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

Das nennt sich Rekursion. Nimm dir Zettel und Stift und schreib dir auf was an die Funktion übergeben wird und was die Rückgabewerte sind.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 27.01.14, 08:59   #3
Odatas
Erfahrenes Mitglied
 
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
Odatas ist unten durch! | -158 Respekt PunkteOdatas ist unten durch! | -158 Respekt Punkte
Standard

Wie schon gesagt ist das Rekursion. Die Funktion Fakultät schaut nach ob die Zahl die du reinsteckst eine 1 ist. Ist sie eine 1 gibt sie die Zahl zurück. Ist sie Größer als 1 wird die das Produkt gebildet mit der Zahl um einen inkrementiert (Schlaue Leute ausdruck für heruntergezählt) welche nochmal an die Funktion gegeben wird und das ganze Spiel geht von vorne los. Und das so oft bis die zahl bei 1 ist.
Odatas ist offline   Mit Zitat antworten
Ungelesen 27.01.14, 10:47   #4
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

[QUOTE=Odatas;25255642. Ist sie Größer als 1 wird die das Produkt gebildet mit der Zahl um einen inkrementiert (Schlaue Leute ausdruck für heruntergezählt)[/QUOTE]

Runterzählen: Dekrementieren
Hochzählen: Inkrementieren
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 27.01.14, 20:43   #5
cortez442
Nur der Hamburger SV
 
Benutzerbild von cortez442
 
Registriert seit: Oct 2009
Beiträge: 476
Bedankt: 293
cortez442 ist unten durch! | -165 Respekt Punktecortez442 ist unten durch! | -165 Respekt Punkte
Standard

Ist halt aufgebaut, wie eine rekursive Funktion aufgebaut werden muss. Man hat eine Abbruchbedingung und einen rekursiven Pfad. Der Abbruchpfad ist offensichtlich Zahl <=1. Bleibt also noch zu klären, wozu der rekursive Pfad führt. Die Funktion ruft sich solange mit dem der um 1 dekrementierten Zahl selber auf, bis die Zahl am Ende 1 ist (Sollte der Startwert <= 1 sein, tritt natürlich die Abbruchbedingung in Kraft und 1 ausgegeben).

Am Ende hast du einen Rattenschwanz von rekursiven Aufrufen in deinem Stack, der rückwärts wieder abgearbeitet wird. Der letzte Aufruf (bzw. der, der als erstes abgearbeitet wird) gibt dir 1 zurück. Dieser Wert wird an die aufrufende Instanz übergeben und mit dem Wert multipliziert (in den Fall die 2). Also haben wir 2! = 2. Dieser Wert wird abermals an die vorherige Instanz übergeben und mit der Zahl multipliziert. Also haben wir die 2 als Rückgabe der eben aufgelösten Instanz, welche mit der 3 multipliziert wird. 2 * 3 = 3! = 6. Das geht dann so weiter, bis die Funktion abgearbeitet ist.
__________________
Ein Fehler ist aufgetreten: der Vorgang wurde erfolgreich ausgeführt.
cortez442 ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr.


Sitemap

().