![]() |
Parameter wieder als parameter mitgeben???
Warum muss ich hier das Ergebnis erst auf a schreiben und dass dann der Funktion mit übergeben.
Delphi-Quellcode:
und kann nicht direkt Ergebnis*n übergeben.
Procedure Fak_rek1(n : integer; var Ergebnis : int64);
a:= ergebnis*n ; fak_rek1 ( n-1 , a);
Delphi-Quellcode:
Gibt es da keine mögklichkeit das direkt zu machen?
Procedure Fak_rek1(n : integer; var Ergebnis : int64);
a:= ergebnis*n ; fak_rek1 ( n-1 , a ); <-- a eingestetzt Edit: Sry, ich hatte vergessen das ergebnis*n durch a zu ersetzten. |
Re: Parameter wieder als parameter mitgeben???
So ginge es:
Delphi-Quellcode:
Aber es wäre komplett sinnfrei, weil Ergebnis offensichtlich (schon vom Namen her) ein Ergebnis enthalten soll. Nachdem die Funktion zurückgesprungen ist, ist sowieso davon auszugehen, das a einen anderen Wert enthält als den, den du a gegeben hast.
Procedure Fak_rek1(n : integer; Ergebnis : int64);
a:= ergebnis*n ; fak_rek1 ( n-1 , ergebnis*n ); |
Re: Parameter wieder als parameter mitgeben???
Also wenn ich nur Ergebnis übergebe, klappt es ja. Wenn ich jetzt noch das *n anhänge gibt er mir an, dass die tatsächlichen und Formalen Parameter übereinstimmem müssen. Nur warum meckert der mir da an den Parametern rum, die sind beide gleich deklariert(int64)
Wenn ich bei der deklaration das var bei ergebnis wegneheme, dann lässt sich das program starten, ist jedoch sinnlos, da ich am ende ja nicht den wert von ergebnis habe, da dieser ja nicht wieder mit zurückgegeben wird. |
Re: Parameter wieder als parameter mitgeben???
Ergebnis ist in dieser FUnktion ein variabler Parameter, das bedeutet, du musst der Funktion an dieser Stelle eine Variable übergeben. Wenn du allerdings an dieser Stelle eine Formel schreibst, wertet der Compiler dies als konstanten Ausdruck.
|
Re: Parameter wieder als parameter mitgeben???
Eine rekursive Prozedur macht imho auch nicht wirklich Sinn. Ich würde da doch eher eine rek. Funktion mit Ergebnisrückgabe nehmen ;).
Weil so wie du es jetzt hast ist es deutlich besser mit einer Iteration zu lösen - es ist sogar implizit quasi iterativ, auch wenn sich die Prozedur natürlich selber aufruft. Aber du rechnest immer nur mit einer identischen Variablen. Durch das Zuweisen an "a" erstellst du eine Kopie des var-Parameters, die aber nicht an selbigen zurückgegeben wird. "Ergebnis" würde sich schlicht nicht ändern.
Delphi-Quellcode:
(ist eben aus'm Kopf - könnte gehen ;))
function Fak_rek1(n: integer): int64;
begin if n>1 then result := fak_rek1(n-1)*n; else result := 1; end; |
Re: Parameter wieder als parameter mitgeben???
Die Iterative + Linear rekursive Variante(deien) hab ich schon, ich Verwende das nur in meiner Facharbeit, um zu die endrekursive Sonderform der linearen Rekursion zeigen. Darum benötige ich diese umständliche Variante :?
Aber pls nicht weiterhelfen, nur weil ich das wort facharbeit geschireben haben, und manche denken werden, ich will dass ihr alles macht, ich will ja aeigentlich nur wissen, ob ich das mit einer Hilfs-Variable machen muss, oder ob es doch eine kürzere lösung dafür gibt, da es ja eigntlich sinnlos ist. |
Re: Parameter wieder als parameter mitgeben???
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz