Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Rekursiver Aufruf - Was geht da eigentlich vor sich? (https://www.delphipraxis.net/142997-rekursiver-aufruf-geht-da-eigentlich-vor-sich.html)

internetnavigator 7. Nov 2009 16:16


Rekursiver Aufruf - Was geht da eigentlich vor sich?
 
Guten Abend zusammen!

Ich habe an meiner Schule einen Kurs Informatik belegt.
Ich habe es schriftlich, also schreiben wir Klausuren.

Nur habe ich folgendes geschrieben:

"Eine rekursive Berechnung dauert
[somit] länger; Schon allein dadaurch,
dass die Rücksprungadresse "gehalten"
werden muss, benötigt das Programm mehr Speicher."

Unterstrichenes zeigt den von dem Lehrer makierten Fehler.

Daneben steht:

"es wird eine Kopie der gesamten Methode im Rechenspeicher abgelegt, [...]"

Was ist denn nun richtig? Wird die gesamte Methode kopiert, oder nur die Rücksprungadresse
im Stack "gehalten"?

Ich habe so viele unterschiedliche Ansichten gehört, so dass ich nun garnicht mehr
durchblicke. Was meint ihr ist richtig?

Gruß !N

Neutral General 7. Nov 2009 16:24

Re: Rekursiver Aufruf - Was geht da eigentlich vor sich?
 
Hi,

Die Rücksprungadresse wird aufm Stack abgelegt, also gespeichert. Alles andere ist Unsinn.

100% sicher.

Apollonius 7. Nov 2009 16:24

Re: Rekursiver Aufruf - Was geht da eigentlich vor sich?
 
Auf dem Stack landen die Rücksprungadresse sowie die meisten lokalen Variablen. Was soll bitte eine "Kopie der gesamten Methode" sein?

3_of_8 7. Nov 2009 16:54

Re: Rekursiver Aufruf - Was geht da eigentlich vor sich?
 
Wobei zumindest manche Prozessoren - ich weiß nicht, ob bei den neueren und gebräuchlichen Architekturen immer noch so ist - zyklische Funktionsaufrufscaches haben, in die Rücksprungadressen sowie mehrere lokale Variablen hineinpassen und gar nicht erst in den Hauptspeicher geschrieben werden.

EDIT: Neben den lokalen Variablen müssen natürlich auch die Parameter gespeichert werden.

Namenloser 7. Nov 2009 16:58

Re: Rekursiver Aufruf - Was geht da eigentlich vor sich?
 
Sehr kompetenter Lehrer :wall:

Ich habe manchmal das Gefühl, dass Lehrer einfach Spaß daran haben, mit dem Rotstift in Arbeiten herumzustreichen - und wenn sie nichts finden, dann streichen sie einfach irgendetwas an - wie bei meiner letzten Englischarbeit: "pseudo-cool" wurde korrigiert zu "pseudo-coole" - WTF? :wall: Und das war nur eine von vielen Stellen... "leider" lag der Fehlerindex trotzdem noch so niedrig, dass er für die Note irrelevant war, weshalb ich auf eine Beschwerde verzichtet habe. Ich habe nämlich leider die Erfahrung gemacht, dass viele Lehrer es überhaupt nicht vertragen können, wenn man ihre Unfehlbarkeit in Frage stellt - Und ich habe wirklich kein Interesse daran, mich mit einem Lehrer anzulegen, den ich wahrscheinlich für die nächsten 3 Jahre nicht loswerde.

In deinem Fall würde ich aber auf jeden Fall darauf bestehen, dass der Lehrer seinen Fehler einsieht, weil er bei dir sicher wesentlich relevanter für die Endnote ist, als die paar vermeintlichen Ausdrucks- oder Grammatikfehler in meiner Englischarbeit. Ich weiß, dass das nicht so einfach ist wie es klingt, weil die meisten Lehrer sich einfach stur stellen - theoretisch könnte man zwar Klage einreichen, aber wer macht das schon...

</rant>

Vielleicht kannst du deinen Lehrer ja mit etwas Fachliteratur überzeugen. Viel Glück.

Neutral General 7. Nov 2009 17:03

Re: Rekursiver Aufruf - Was geht da eigentlich vor sich?
 
Was heißt "hoffentlich kannst du ihn [...] überzeugen" ??

Der Typ soll sich mal den erzeugten Assembler Code anschauen und vorher nen x86-Assembler Crashkurs machen -.-

Namenloser 7. Nov 2009 17:13

Re: Rekursiver Aufruf - Was geht da eigentlich vor sich?
 
Zitat:

Zitat von Neutral General
Was heißt "hoffentlich kannst du ihn [...] überzeugen" ??

So läuft es nun mal defacto in der Schule, scheinen viele leider zu vergessen...

SirThornberry 7. Nov 2009 17:17

Re: Rekursiver Aufruf - Was geht da eigentlich vor sich?
 
Wenn du wirklich unbedingt dein Recht durchbringen willst dann such dir einen Programmierer in deiner Nähe welcher deinem Lehrer einen Besuch abstattet.

blablab 7. Nov 2009 17:25

Re: Rekursiver Aufruf - Was geht da eigentlich vor sich?
 
Du musst selber einschätzen obs was bringt oder nicht. Es gibt Lehrer bei denen wärs am schlausten einfach die schlechtere Note zu akzeptieren...
Ich hatte au mal so einen Fall, da hab ich ne Aufgabe komplett gelöst und später in der Arbeit hab ich nochmal die Aufgabennummer hingeschrieben und 1,2 zusätzliche Bemerkungen dazu gemacht. Und dann hat er mir die Bemerkung bewertet und die richtige Aufgabe übersehen. Ich bin dann zu ihm hin aber das war ihm völlig egal. Er hat sogar zugegeben dass ers falsch gemacht hat, aber korrigieren kam für ihn net in Frage... Das einzige was du bei solchen Leuten erreichen kannst ist dass sie dich aufm Kieker haben.

Delphi-Laie 7. Nov 2009 17:41

Re: Rekursiver Aufruf - Was geht da eigentlich vor sich?
 
Ich bin mir nicht so ganz sicher, ob das wirklich alles mit einer bloßen Rücksprungadresse gelöst werden kann.

Ich schreibe jetzt mal so, wie ich es Laie verstehe, und bitte alle Informatiker, mich dafür nicht (virtuell) zu prügeln.

Nehmen wir als trivial(st?)es Beispiel die Fakultät, mathematisch etwas unsauber definiert:

n!=n*n-1 {n>1,2}
n!=n {n=1,2}
n!=1 {n=0,1}

Pascal-spezifischer:

if n>1 (alternativ: >1)
then fak(n):=n*fak(n-1)
(alternativ: result:=n*fak(n-1))
else fak(n):=1

oder komplizierter:

if n>2 (alternativ: >1)
then fak(n):=n*fak(n-1)
(alternativ: result:=n*fak(n-1))
else if n>0 (alternativ: n>1) then fak(n):=n
else if n=0 (alternativ: n>=0) then fak(n):=1

Also, mindestens dieses "n*" muß doch in jedem Falle im (Stack-?!)Speicher zwischengelagert werden, denn die Multiplikation kann doch erst ausgeführt werden, wenn das Ergebnis der Rekursion gelöst wurde (das selbst aus Multiplikationen, Stackspeicherablegungen und -"rückholungen" gewonnen wird).

Es wird also nicht nur eine Methode bzw. ein Zeiger darauf benötigt (wie sie im Quelltext und auch nach der Compilierung vorliegen), sondern es müssen auch konkrete Variablen(inhalte) mit erfaßt werden. Das alles mit einer schönden Rücksprungadresse?! Wohin? Dorthin, wo die Methode und die Variablen abgelegt werden?

Meinte der Informatiklehrer dieses Ablegen von (mindestens) "(result:=)n*" als "Kopie der gesamten Methode"?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz