[Playlisten] [Impressum und Datenschutzerklärung]

S03B.1 Fibonacci-Folge, Rekursion, statische Variablen


CC-BY-NC-SA 3.0

Tempo:

Anklickbares Transkript:

um etwas zu Funktionengucken und zwar folgende Funktion an die soll eine ganze Zahl zurückgebensie heißt sehr kreativ Fanund sie soll eine vorzeichenloseZahlan seinundin eine vorzeichenloseganze Zahl namens X auch sehr kreativ bezeichnet entgegennehmenundsie soll folgendes tunwenndas X kleiner gleicheiner gleich eins istdann soll die FunktionSchweifklammerdann soll die Funktion eins zurückgebengeben in der Zahlkleiner gleich eins rein dann soll die Funktion ein zurückgebenich seh gratis sollte hier auchTschuldigung an Saint internsosoll eine Furz vorzeichenloseganze Zeit nehmenund eine vorzeichenloseganze Zahlzurückgebenwenn die Zahl die rein kommt kleiner ist kleiner gleich eins ist soll sieeins zurückgebenund ansonstensollte folgendes zurückgebenähmsie soll sich selbst aufrufenmitX minus einsund sich selbst aufrufen mit X minus zweipassiert er zwar wieder sehr gewagte Konstruktion aufeine Funktion die sich selbst Aufrufanvielleicht mal gerade warum das funktionierenwirdwarum wird das immer funktionierenwarum wird das nicht negativ werden X minus eins X minus zwei Bombe das nicht negativ werden hier sage ich ja die Funktionzur aufgerufen werden nur mit Zahlen ab null aufwärts mit vorzeichenlosenganzen Zahlenwarum rufe ich die Funktion nie mit negativen Zahlen aufrichtig wenn das hierein von den beiden negativ werden würde hierdas X minus zwei negativ wert ist das gefährliche Ereignis einzig nicht so gefährlich wird sicher nicht ganz ?? X minus zwei ist das gefährlichedas wird negativwenn X gleich null ist oder ist gleich eins iststartet mit null wirklich negativBeistrich ?? ist gleich eins ist das sehr negativwenn X gleich zwei ist denn hier mit zwei Rank dritter null ist in Ordnungunsere kritischen Fälle sind ist gleich null und X gleich einsaber netterweise sehen sie dann dann nicht in dem F über eins zurückals das Haut tatsächlich hin wenn ich hiermit nur reingehenwenn ich mit eins Angela nicht erhoben und ansonsten habe ich zwei oder mehr und dann kann ich das tatsächlich machen ich kann die Funktion von sich selbst aufrufen?? gibt es keinen Ärger geben anund lieferte folgendes??direkt auf dem Rechner sondern mal auf Papier nachdenkenwas wird passieren anscheinendwar es gleichvon dreiwas wird da rauskommenwenn ich das jetzt so aufrufe das es meine Funktion die rufe ich jetzt mit dem Wert drei aufwas wird passierenum Verwirrungen vorzubeugendann ?? ich wollte folgendes sagen diese Funktion ist gefährlich denn wenn ich hiermitzum Beispiel mit eins rein gehe für dich hier die Funktion von minus eins wieder aufrufen wollen was nicht gut ist denn die Funktion ist ja so deklariert dass sie an sein Kind haben will aber mit dem ganzenKrempel ja außen rum ist die Welt in Ordnung wenn ich jetzt hiermit nur noch mit eins reingehe lande ich im ersten Fallwunderbarund wenn ich mehr habeals eins ab zwei aufwärts habe ich hier vernünftige Werte in den Funktionen drin stehen das wird funktionierenso noch mal die Aufgabewas passiert wenn ich eher von drei Aufrufesickert das siehst du ?? mit mir durchgehtanscheinend in solcher Schreiben sodu sieht etwas hübscher ausgucken wir mal was das Maschinchen sagtsindKomma nicht ich will die localAgleich dreiin der TatwarenRechtsverfolgungdes normalen Einzelschrittenwas da jetzt passiert die Funktion ruft sich selbst aufdas ist ja eh eine ungewöhnlicheGeschichtenoch mal Einzelschritten durchalso Funktion von dreiich gehen die Funktion reinXist dreiX ist nicht kleiner gleich eins das heißt ergeht es in das Els reinEls reinin dem es muss er jetzt ausreichende Funktion von zweiund die Funktion von eins?? nicht noch mal in die Funktion reingehenalso innerhalb der Funktion bin ich jetzt noch mal innerhalb der Funktion hätte sie vom Tsunami zwei aufgerufendas Grabmalhängt ausbuchstabierenals ich bin in Maine mal gewesen in Maine Marke startetin mein kommt F vorund entspringt dersoll sie mal meistens dahin springt er in die Funktion reinund in der Funktion selbst kommt noch mal hervorund erspähte noch mal in die Funktion reinsind jetzt habe ich den frischen Wert Xnämlich inzwischen wächst er nicht in meinem alten wird X zu tun ?? neue Variablen die schon wieder X heißt aber das ist nicht dasselbewie das Xaus dem Aufrufdas bleibt eben in den verborgensollte Baupreise Verschachtelungder Aufrufe zeigenist der sogenannte Call Stackaufrufstarten ich weiß immer so toll sagen würde Aufrufstapelgesehen die welche Funktion welche aufgerufen hatdie Funktion Mainehat F aufgerufenund F hat noch mal F aufgerufen und hier oben bin ich gerade in der Funktion Fda bin ich gerademan kann auchwieder zurückspringenvon wo bin ich gekommen von da bin ich gekommen und werde das suchen gerade in der im Bericht wird Mensch youCall Stackvon Woge nicht gekommenda bin ich hingegangenmit Doppelklick jeweils hin und her gehen von Mainewenn ich gestartete Sinne gibt noch eine Funktion ineckigen Klammernbin ich mir gehörtirgendwas von außen hat meine Funktionen aufgerufenich bin von Maine gestartetdass er von drei?? springt in die Funktion reinLustigerweisespielte jetzt noch mal wieder in dieselbe Funktion rein mit einem frischen Exil habe ich das X einen ersten Aufruf der sich seit dreiund bei den nächsten Aufrufdieser sich gleich zweiandas fürchtete Wechsler Vorwahl weil oftdie Verwirrung besteht aus den jetzt das X ist im Jemen Aufruf haben sieverzeichnetsienachjedem Aufruf können Sie sein frisches Xdannmüssen kleinersoalso aus F ist jetzt zum ersten Mal nochmals F aufgerufen worden jetzt mit der zweiMannunter muss er das schon wieder tunruf jetzt noch mal die Funktion auf aber mit X minus eins also mit einsich geh noch mal in die Funktion einesheißtBusiness jetzt zum dritten Mal aus der Funktion F die Funktion F und daraus die Funktion F ausgerufen aufgerufenzum dritten Mal mit einer neuen Variablen Xdie Annette dann noch lebendig das kann man sich angucken und zurückgehtauf diesen Stapel wieder zurückgehtda es immer noch die zwei dran und bei der ist immer noch die drei trennen und bei unserer jüngsten erst jetzt die eins trennen Ar und jetzt greift diese Fallunterscheidung??ich gebe eins zurück für die aller jüngstedamit habe ich habe es diesen Teil ihr ausgerechnetbrauche ich den hier noch X minus zweiF von null da wieder reinda wieder rein und sie sehen aber ich lande wieder hier in dem ?? nicht in dem Elswieder eins zurück ?? hat den?? und jetztwerden wir das quasi wie den Reißverschluss wieder zu und gab dendas Ergebnis drei stehendas nennt sich Rekursionein rekursiveAufruf eine Funktion ruft sich selbst aufanim Laufe des Semesters kommen offenbar vernünftige Beispiele dafürdieses hier ist sonderneheran den Haaren herbeigezogenBeispieldieFionacheFolgeBeistrich sind noch an dir Innern geglaubt habe ich in meinem ersten oder zweiten Semester erwähntIvo Natchieins einszweidreifünfacht??dreizehn?? einundzwanzigund so weiteram Mann summiert immer die beiden VorgängerBeistrich die nächsten drei plus zwei ist die fünffünf plus drei ist die achtArtus fünf ist die dreizehnTier vorne fange mit Einsen an eins plus eins ist die zweiund diese eins und zwei ist die dreigerade ausgegraben ist diese drei?? meine Funktion macht folgendes meine Funktion liefert diese Werte jetzt zurückals er von nuller von eins dass es gerade diese Fallunterscheidungkleiner gleich eins gibt ?? ein hundert und immer die Summe zurückdie Summe der beiden Vorgänger er von zweivon dreiund so weiter meine Funktion nach nichts anderes als dieseüber die Folgeneins eins zwei drei fünf und so weitermanist sich hochgradigpraktischder gute Neonazis draufgekommen dass sie sich überlegt hat wie sich Kaninchen vermehren von einer Generation zur nächsten Komma wenn bei einfachen Annahmensehr vereinfachen an Namens zu sonderFolge von Zahlenim Endeffekt dann exponentiellexplodiertandas wäre ein Beispiel für eine rekursiveDefinitioneine Funktion ruft sich selbst aufdie Funktion ist die Summe ihrer beiden vorherigen Werte sozusagenich das es jetzt aber mit vieran das man sieht das es wirklicheine exponentiell Explosion wieder bei den Kaninchen auch bei der Zahl der Funktion aufrufen dann soll er fünf rauskommen wenn ich vier Einsätzeder null eins zwei drei vierte in derFolge hier soll der fünf gleich werden andiese Aufrufe hier das ?? vor noch mal sagen diese Aufrufe hier werden ja einzeln durch die Kinder beim allerersten Aufrufmuss sich jeder irgend ein Wert zurück liefernguckt sich hier wieder die Funktion selber Anruf die Funktion selbst einmal aufund definiert das durcherste vertiefende Zahl generiertund erst dann kommt der Zahlmuss jabeim allerersten Aufruf dieser Funktion für beidesden Vorgänger und den Vorvorgängerfür beides muss er Zahlen generierenund das ausrechnen zu könnenerrechnet erst mal den ausdas gibt einzelne ganze Kaskade an Aufrufen der Funktion von sich selbst um den auszurechnenund danach gibt es noch malganze Kaskaden aufrufenmit denselben Funktionswertengrößtenteilsvöllig schwachsinnig ?? sehr ineffizientund ihn auszurechnendas sind etwas wie gesagt jetzt mal die Nummer vierdas ist einesehr ineffiziente Art so etwas zu programmiereneine elegante Art aber eher ineffizientso eher von vierjetzt wird er in die Funktion reingehen?? ich gehen die Funktion rein genommen schon raus so der erste Aufrufhier kommt der Wert vier andas ist nicht kleiner gleich einssondern er muss die Summe ausrechnensoder CTS dient mirdurch die Kinderich bin im aller ersten Aufrufresidierte noch das ist ja der ?? das Messer kommtich bin im aller ersten Aufruf einer Funktion Fdes Mose hier eine Zahl haben es hilft nicht hier muss jetzt in eine Zahl rauskommen und die wird jetzt erst ausgerechnetdieser Aufruf jeder kommt viel spätererst kommt der Aufruf also kommt der hier mitdrei reinigte Funktionvon drei das würde jetzt als nächstes machen deutlich einLinde der nächste Aufruf sogar skandiertdie Funktionvon dreiist nicht kleiner gleich eins der Wert also gehen wir da unten hintenjetzt müssen also haben die Funktion von zweiund die Funktion von einsdoch hier muss es wieder erst im ersten Wert komplettausrechnen könnenimmer daranwird in der Kaskade die Funktion von zwei ist nicht kleiner gleich einsverschärftenanwesende Mitglieder siefür den es haben einsdas etwas die Funktion von eins??ist der Beistrich der gesagt der Oberavismotivationvon eins ist natürlich einsund die Funktion von null Access gerade gleich zwei jede Funktion von nullder Aufruf hier sehen A nullgeht der oben reinwir haben eins also besser verdienenfür den letzten Aufruf ?? gehabtjetzt geht das ganze wieder zurück?? war dannzu schnellund die Eis gleich fünf das Fahrkarten bis hin zu schnell glaube ichin ?? Klammer auf malen wie das funktionieren würdeich möchte bestimmenF vonvier um elf von vier zu bestimmenist ausrechnener vondrei groß F von zwei die Summe der beiden Vorgängerum elf von drei auszurechnenist auszurechnendie Summe der beiden Vorgänger er von zwei plus elf voneins?? von zwei auszurechnenbrauche ich eher von zwarfalschen?? von eins Plus F vonnulldas kann jetzt alles haben ?? von eins war einsvon null war eins F von eins war einerste dieser ganzelinke Teil durch gemunkeltdas vertane Zahl haben und dann kommt er von zwei großes F und zwei F und zwei ist die Summe der beiden Vorgängervon Einsplus von nullan den beiden weiß ich die sind einsund zusammen habe ich dann fünf raus genauso geht der Rechner dann jetzt vorerst mal die ?? von drei ausrechnen mit dieser ganzen Kaskadehatte dafür die Zahldann ?? von zwei mit dieser Costa Ricaund eine von zwei mit dieser Kaskade dafür bezahltam günstigsten sind auch andersrum ?? es von zwei ?? von drei aberich denkeLeute die das entwickelt haben werden es automatisch zu bauen das erste linke Tagebuch berechnet wird und dann der rechte Teilberechnet wird alles andere wäre überraschenddasist Rekursion eine Funktion ruft sich selbst auf und sie sehen wie das jetzt hierexplodiertKomma dass weiter treibtstehen was ist eine welcher Prozessor eingestellt war je nachdem welche Prozessor eingestellt es gibt irgendwann Probleme ich probier mal F zehndas noch was sinnvolles wirdneunundachtzigdas sieht irgendwie noch sinnvoll ausamnatürlich als nächstes nämlich mal folgendes tunich möchte mal mitzählenum eine Idee zu Krieg möchte ich mal mitzählen wie häufig denn jetzt F aufgerufenwirdich bestimme eher von vier das ist der erste Aufrufeinsund ?? von vier aufzurufen?? zu bestimmenhabe ich zwei Funktionsaufrufevon Fder erste Funktionsaufrufführt zu weiteren zwei Funktionsaufrufeund der Funktionssaufrufführt zu weiteren zwei Funktion aufrufenund dieser hierfür zu weiteren zwei Fonds uns aufrufendas wenn ich es von vier Aufrufe ?? ein zwei drei vier fünf sechs sieben acht neunAufrufe meiner Funktiondas es programmiertechnischBand wie oft wird eigentlich die Funktion aufgerufenich hatte natürlich immer wieder vier hier reinüberlegen sich mal gerade eine Möglichkeitwie man das mitzählen könntezu rein interessehalberwie kann ich mitzählen wie häufigdiese Funktion Faufgerufen worden istich erzähle mal bisschen was dazualso der Ärger richtig bemerkt wenn ich hier eine neue Variable einführeUppsala eine neue Variable Einführung mit der ich zählen wollen würde wie häufig die Funktion aufgerufen worden istdas Problem diese Variante wird er jedes Malüber gemildertjedes Mal wenn die Funktion aufgerufen wird steht RZ gleich NullPunkt da kann ich noch so häufigZ erhöhen ist nicht helfen das haben wir schon in den X gesehendie Kinder jedem Aufrufen frisches Xes überlebt einfach nicht zum nächsten Aufrufder Alternative wäreeine Variable zu bauen die nicht in der Funktion drin ist in C und C plus plus geht dassie können variabel außerhalb ?? WirkungenKomma so aneine Variable außerhalb der Funktionwäre dann globalan das es ein bisschen gruselig weil jetzt jeder in dieser Dateiauf diese Variable zugreifen kannman dann zum Schluss immer genau weiß wer nun alle drauf zugreifenaber das muss es mal gerade sodas wäre die klassische Art eine globale Variabledie zähle ich einfach jetzt mal hochsobald die Fusion aufgerufen worden ist die eins HochzählenamKokonsoweit fusioniert das Wasser im Radio laufeninBeziehen Sie ?? fehlt irgendwieist es ihm nicht eine lockere Variable die Lokalssind die lokalen Variablen die innerhalb von Schweifklammermehr oder minderAusnahme gleichandie Variable in der von Schweifklammer bei dir nicht so speziell was dabei steht das in die Localszettelistnicht lokalsondern das finden Siebei den StetticshierJus der Textda finden Sie Zund dass es neunWasser im Haus hattentatsächlichtatsächlich neun Aufrufe jetzt hieramKartekostetauch nicht mehr sodas es aber eher hässliche Art das so zu machen wie gesagt esgilt als schmutzigheutzutageKomma nicht so genau weiß wer jetzt eine Variable Z da benutzt??wenn es sich vermeiden lässtVermeidenhübscher wäre esdas Dingin die Funktion zu nehmenund der Dichter vorzuschreibendas heißtin C und C plus plus an dieser Stelle in C plus plusund heißt in zehndiese Variable wird ein einziges Mal angelegtdie Funktion greift immer auf diese Variable zu gibt's nur ein einziges Mal zwei Jahre nicht immer wieder neudas heißtstatisch die Bank stehen sozusagendie Variante Beistrich die von einem Aufruf zum nächstennunwie häufig wird das hier ausgeführtAt-Zeichen nullhabe ich noch ?? Antwort Rücksicht auf die ich gehofft habe Neindieses Ding wird ein einziges Mal ausgeführtnicht jedes Mal nicht jedes Mal wenn die Funktion aufgerufen wird sondern ein einziges Mal und dass es eine total irritierende Schreibweise deshalb sage das Komma so ausführlichauch wenn er so aussieht als ob das jetzt jedes Mal gemacht wird ?? hätte gerne hättenwir die jedes Mal Z auf null gesetzt werdenKomma mit dem stetig alles andere Bedeutungmit dem staticgibt diese Variable ein einziges Malwird nicht immer wieder neu angelegt für jeden Durchgang der Funktionsvariablegibt ein einziges Mal und sie wird ein einziges Mal auf null gesetzt zu Beginndes Programms und dann nie wiederdas ist total irritierend in dieser Schreibweisean sich empfindlichesAusrufezeichendanebenso ist die Historieleider gewachsenstatt Variablen werden ein einziges Mal initialisiertander Gitter so die Feinheitenwerden automatisch auf null initialisiertwenn nichts da steht anders als die andern aber Badezimmer ganz ausführlichdie ?? wird es auf null initialisiertausdrücklichund jetzt muss ich denselben Effekt habenwie eben?? laufen lassensehen Sie Z steht wieder auf neunfunktionell also auchSchöne an diesen statischen Variablen ist das die in der Funktion verborgen sindaußer dieser Funktionkann keiner aufzugreifen?? das ganze saubererjetzt weiß ich egal was ich mitzieht veranstaltekein anderer seine Finger im Spielalles was passiertmit Z passiert in dieser Funktion und sonst nirgendwoder Nachteil ist Sie können jetzt nicht von einer Software zugreifen sie können jetzt nicht in Maineauf Z zusei sehr unsichtbarjawozu brauche ich das zum Zählenklar das natürlich SondenBilly Bali Beispiel zum Zählenwerden die sinnesnach ?? mein Beispielprogrammwenn sie rein gucken fürs Praktikum muss umgehend in meinen Controller gesteuert dann merkt man sich in statischen Variablen zum Beispiel auf was man denn gerade irgendein Ausgang gestellt hatwohin habe ich denn das letzte Mal in Werbung gefahrendamit ich in der wo ich ihn nun hinfahren muss und solche Geschichten ganz einfach innerhalb der Funktion merkenfür den nächsten Funktionsaufrufund weiß das garantiert kein anderer ?? umformen kann weil es der Funktion gehörtund ansonsten verborgen istLeerzeichen ?? Komma die Explosion an Aufrufendie weit von den Kongress bis zehnalso wenn ich jetzt hierdaszehntes ersteElement ausder Fiona Chifolgender haben willnunguckennicht in den ??den sie wenn die Nummer zehn ausrechnen ?? die Funktion hundert sieben siebzig mal aufgerufendas ist total ineffizientdas wird man in der Praxis niemals so programmiertin der Mathematik ist das lustigzu Rekursion hinzu schreibenin derWarenweltwenn's drauf ankommt was auszurechnensind Rekursion eine Katastropheeine Funktion die sich hundert sieben siebzig mal selbst Aufruf nur für den Wert zehndas ganze nicht bringendannirgendwann bitte auch gleich Feierabend sein was ich frisch eingestellte GPS gerade Feierabend machtvon zwanzigbisknapp über den Öl für den Wert zwanzig einseitig tausend Menschen schon Überlauf gegeben hat andas explodiertganz fürchterlich das wird nicht funktionieren wenn Sie wissen wollen ?? Kaninchen sind das hundert Generationdas haut einfach nicht hindas ist der Ärger bei solchen rekursivenDefinitionensind mathematisch total hübschallgemein totalineffizientoder sogar unmöglichauf dem Rechnersollte doch noch mal denCallstackzeigenKommawarum das unmöglich werden wird jemandem weiter man das treibtden Call Stackwenn ich hierSinn was hier passiertdie Funktion F ruft sich selbst Aufruf die selbst Aufruf sich selbst auf und so weiter und so weiterund die gibt's dann schon allmählich Ärgerwollte Vorstagsteckt Leerschritt ist Arbeit Auzeit des Tag weintauf dieser kleinen Maschinemit ihrenirrtümlichen Chip eingestelltesunter Depressionenzwanzig Byte auf dieser kleinen Maschineist da kein Platz dadass ich die Maschine merken kannvon wo sie jetztwohin sie zurückspringen muss von wo sie gekommen ist das hier muss irgendwo gespeichert werdenwelche Funktionhat mich gerade aufgerufen das muss ich wissen damit ich wieder zurückkehren kannzweites hier noch malanwenn ich hiereher von nullwenn hier eher von null auf Google ausgewertet worden istoder der Funktionswert wieder irgendwo eingetragenwerden da musste irgendwo eingetragen werdenund dann ist das ja ausgerechnetund dann muss das irgendwo eingetragenwerdenmuss ich den Rückspiel die Rücksprungsadressemerkenwir das so schön heißt die Funktion müssen wissen wohin sie wieder den zurückgehensoll mit ihrem Ergebnisdiese Funktion muss wissen dass sie dahin soll und die muss wissen dass das Ergebnis dahin soll und die muss wissen das Ergebnis dahin gehörtdas heißtder Rechner muss sichdiese ganze Liste merken welche Funktion welche aufrufen hat bis zum aktuellen Aufrufdas Kosten Speicherplatzund sie sehen hierbei dem siebzehnten Aufruf sagte mir schon zu wenig Speicherplatz für diese Aufrufe hierdas ist das nächste was schiefgeht solche Diskussionen kosten im Zweifelsfall zu viel Zeitund sie fressen Speicherplatzweil sich der Rechner merken muss wir den seine Ergebnisse wieder unterbringen sollanalso was man da ?? sich dann theoretisch ?? nicht mit den Rekursionleider praktisch nicht so total hilfreichund wird in der Praxis versuchen Rekursion zu vermeideneine Stellehab ichirgendwann noch im Laufe des Semesters muss Band wird bei Dateisystemenan wenn ich ein Dateisystemdurch Grabe gehen den Ordner rein und da in alle Unterordner und dein aller Unterordnerda lässt es sich kaum vermeidenaber ansonstenhat man sehr selten Rekursion im wahren Leben weil sie so explodiert