Einzelnen Beitrag anzeigen

zack0r

Registriert seit: 5. Jan 2005
Ort: Rosenheim
25 Beiträge
 
#1

Rekursionsproblem

  Alt 3. Mär 2005, 14: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
  Mit Zitat antworten Zitat