Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++

Fakultät rekursiv berechnet

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Rekursive Funktionsaufrufe benötigen Sie immer wieder. In diesem Workshop zeigt der Trainer anhand einer mathematischen Problemstellung, wie Funktionen rekursiv aufgerufen werden.

Transkript

Ich möchte an diese Stelle mal eine kleine Aufgabe geben für unseren Workshop. Und zwar Aufgabe soll es sein die Fakultät zu berechnen. Fakultät das ist einfach definiert. Ich schreib das hier mal kurz rein, "n!", das ist die mathematische Schreibweise "=(n-1)! * n". Das ist ein bisschen tricky. Das ist eine rekursive Definition. Man kann das aber jetzt ganz unterschiedlich lösen. Zum Beispiel mit einer Schleife. Das können Sie jetzt einfach mal probieren, und ich werde ihnen jetzt zeigen, wie man das Ganze mit einem Rekursions-Aufruf lösen kann. Dazu definieren wir uns jetzt einfach mal die Fakultät. "int fak" nenne ich das ganze Teil mal. "int f" ist der Parameter und das soll natürlich zurückgegeben werden, das Ergebnis der Fakultät, und deshalb gebe ich das jetzt hier mal ein. ...und hier noch die geschleifte Klammer zu. Ja, was man jetzt machen kann bei einer Rekursion, das heißt an sich selbst aufrufen. ich definiere hier jetzt einfach mal das Ganze sowie man es vorgegeben hat. "if (f<=0)". Das ist der Sonderfall. Das nennt man übrigens auch Abbruchkriterium. So, dann soll einfach der Wert übergeben werden. Und zwar "1". Das ist so definiert. Das müssten wir hier unten noch ergänzen, nämlich dass "0!=1". Ganz wichtig, sonst habe ich kein Abbruchkriterium, sonst hört das Ganze hier unten nie auf. Und nun kann man in der Tat praktisch genau so schreiben, wie es in der Definition steht. Nämlich, was ist die Fakultät f, von f oder von n, ist einfach Fakultät von: f haben wir ja den Parameter genannt. "return ( fak (f-1) * f);" Ich definiere sozusagen die Fakultät rekursiv, also "return (fak (f-1) * f);". Genauso wie hier: "n! = (n-1)! * n". Das in der Funktions-Schreibweise sieht hier genauso aus. Und damit bin ich eigentlich auch schon fertig. Wir können jetzt hier mal Fakultäten ausrechnen. "for (int f=0;...". das kann ich ja jetzt beliebig nennen. " f<20; f++)" Die Fakultät, die ist ein bißchen fies, die wächst nämlich sehr stark an. Gbit also gleich sehr schnell große Werte, die da raus kommen. Und wir geben das Ganze dann mal aus. "cout << fak (f) << endl;". Die Parameter hätte man ja auch anders nennen können. Und das ist schon das Ganze. Jetzt schauen wir mal, ob das Ganze durchrutscht. Bei diesen Rekursionen muss man immer wahnsinnig aufpassen, dass das Abbruchkriterium auch funktioniert, sonst schleift sich dies unendlich. Und hier sieht man schon, da unten ist spätestens Schluss. Wir können es ja...das wäre also 20,19,18,17,16...dann ist es vorbei. Das heißt, weiter kann ich das Ganze eigentlich gar nicht berechnen und dann schreiben wir hier jetzt noch ein bißchen hübsch dazu. Das ist also f. Und dann kann man ja das mathematische Symbol hier noch ausgeben. So. schauen wir mal, wie das Ganze jetzt aussieht, und starten das hier mal. Ah, jetzt habe ich hier glatt noch ein Fehlerchen eingebaut. Sieht man hier schon, da fehlt wieder das Ausgabesymbol. Das passiert natürlich schnell mal. So, starten wir es mal durch. Gut, da unten würde ich mich jetzt schon nicht mehr darauf verlassen, Die 15, die sieht nämlich auch nicht gerade gut aus. Eigentlich hört das schon viel früher auf. Also hier muss man ein bißchen aufpassen, da bekommen sie nämlich sehr schnell eine Bereichsüberschreitung. Sie können das ja mal ausprobieren. Man kann das Ergebniss auch ganz schwer kontrolieren, weil Sie müssen dazu jedes Ergebnis kennen. Ob es bereits falsch ist, ob 13 Fakultäten noch stimmt oder nicht. Rein gefühlsmässig, hier mal so von dem Ablauf, würde ich sagen 12 Fakultät könnte noch in Ordnung sein. Ungefähr 10 mal den Wert, man kann das ja hochrechnen, dass ist ungefär 11 Mal ... also genau genommen 11 Mal den Wert, gibt dann hier 12 Fakultät. Das kann man hier schon ganz gut abschätzen. Das stimmt also noch. 13 Fakultät würde er mit einem 'long' oder mit einem 'integer' - das ist ja in dem Fall eine 32Bit Zahl - nicht mehr genau berechnen können. Und müsste dann andere Zahlenbereiche nehmen, zum Beispiel könnte man sich dann mal mit 'double' versuchen. aber das hat ja auch seine Limitierungen. Das hat dann allerdings 64Bit minus der für den Exponenten gebrauchten Bits. Ist also 24Bit Mantisse normalerweise. Hat man ein bisschen mehr Reserve. Man könnte mit einem 'long long' arbeiten. In einem 64Bit Rechner geht das auf jedem Fall auch wieder entsprechend. Also hier könnten Sie auch selber mal ein bisschen experimentieren mit dem Ganzen.

C++

Machen Sie sich mit den einfachen Grundlagen zu C++ vertraut und lernen Sie anhand zahlreicher Übungs- und Codebeispiele die Klassenkonzepte, Prozeduren und Funktionen kennen.

9 Std. 3 min (143 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Video-Training auf DVD mit Bonusmagazin

+ Tutorial to go: Mit Videos für iPod, iPhone & Co.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!