AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Rekursiver Aufruf - Was geht da eigentlich vor sich?
Thema durchsuchen
Ansicht
Themen-Optionen

Rekursiver Aufruf - Was geht da eigentlich vor sich?

Ein Thema von internetnavigator · begonnen am 7. Nov 2009 · letzter Beitrag vom 8. Nov 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
internetnavigator

Registriert seit: 13. Mai 2006
94 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Rekursiver Aufruf - Was geht da eigentlich vor sich?

  Alt 7. Nov 2009, 17:16
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
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

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

  Alt 7. Nov 2009, 17:24
Hi,

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

100% sicher.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

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

  Alt 7. Nov 2009, 17:24
Auf dem Stack landen die Rücksprungadresse sowie die meisten lokalen Variablen. Was soll bitte eine "Kopie der gesamten Methode" sein?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#4

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

  Alt 7. Nov 2009, 17:54
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

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

  Alt 7. Nov 2009, 17:58
Sehr kompetenter Lehrer

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? 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.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

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

  Alt 7. Nov 2009, 18:03
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 -.-
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#7

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

  Alt 7. Nov 2009, 18:13
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...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

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

  Alt 7. Nov 2009, 18:17
Wenn du wirklich unbedingt dein Recht durchbringen willst dann such dir einen Programmierer in deiner Nähe welcher deinem Lehrer einen Besuch abstattet.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#9

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

  Alt 7. Nov 2009, 18:25
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.
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#10

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

  Alt 7. Nov 2009, 18:41
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"?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
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