Registriert seit: 5. Jan 2005
Ort: Rosenheim
25 Beiträge
|
Rekursionsproblem
3. Mär 2005, 15:36
Hallo!
ich habe ein Problem: ich wollte die Ackermann-Funktion rekursiv programmieren. Das an sich stellt ja nun kein Problem da, aber ich wollte, dass die Zwischenschritte mit ausgegeben werden. Nun habe ich einen Prototyp in Pascal entworfen (der einfacherkeit halber, ist ja bei so Sachen im Grunde das selbe, wie Delphi) der sieht nun so aus:
Delphi-Quellcode:
program ackermann;
uses crt;
var n,m, ans, tmp, count : integer;
key : char;
function f(m,n : integer): integer;
begin
count := succ(count);
if m = 0 then
begin
tmp := n;
f := n + 1;
end
else if n = 0 then
begin
//write(' = f(',m,'-1, 1)');
writeln(' = f(',m-1,', 1)');
f := f(m-1, 1);
end
else
begin
//write(' = f(',m,'-1, f(', m,', ', n,'-1))');
writeln(' = f(',m-1,', f(', m,', ',n-1,'))');
f := f(m-1, f(m, n-1))
end;
end;
begin
clrscr;
repeat
count := 0;
write('m = '); readln(m);
write('n = '); readln(n);
writeln;
writeln('f(',m,', ',n,')');
ans := f(m, n);
writeln(' = f(0, ',tmp,') = ',ans);
writeln;
writeln('Anzahl Funktionsaufrufe: ',count);
write('continue y/n ');
readln(key);
writeln
until key='n'
end.
So das geht aber so nicht, weil bei jedem (!) Funktionsaufruf die Zwischenschritte ausgegeben werden, also auch bei Schritten, die garnicht angezeigt werden sollen, bzw. die man auch garnicht zuordnen kann. Die Ausgabe sollte etwa so wie in diesen Beispielen aussehen: kalle2000
Ich habe schon soeiniges probiert, zB hatte ich an einer zweiten Funktion, oder eher procedure für die Ausgabe gedacht, aber das ging auch nicht. Hab es mit einer temporären Variable probiert, die dann am Anfang auf 1 steht und danach auf 0 aber die Schritte nur ausgegeben werden, wenn die Variable auf 1 steht, aber das hat auch nur bei manchen Berechnungen funktioniert. Also eigentlich müsste man ja nur rausfinden, um welchen Aufruf es sich handelt, deswegen hab ich auch das mit dem count gemacht, dass hat aber auch nicht geholfen.
Wäre nett wenn ihr nochmal eure alten Turbo-Pascal Compiler auspacken würdet und mir helfen würdet (Delphi geht auch ^^)
naja schonmal danke im Vorraus, MFG F. Schmitt
|