Pascal Problem

MasTeRrr

Cadet 1st Year
Registriert
März 2007
Beiträge
8
Hi,
ist vielleicht blöd wenns mein erster Post gleich so ne blöde Frage ist. Aber denk mir das es für euch wohl nur ein kleines Problem ist und zerbrech mir darüber den Kopf:

Also in BP soll ich die Zahlenreihe 0 1 1 2 3 5 8 12 20 .... (Formel: c(n ) = c(n-2) + c(n-1)) rekursiv darstellen.

Hoffe ihr könnt mir helfen

MfG
 
Code:
function fibonacci(Index:Integer):Integer;
begin
  if Index > 1 then
  begin
    result:=fibonacci(Index-1)+fibonacci(Index-2);
  end
  else
  begin
    result:=Index;
  end;
end;

Ist ungetestet, aber ich hoff, das ist so richtig :)
 
thx für die schnelle antwort

bin kein wirklicher crack, aber muss der index nich erhöht werden, oder gehört die ausgabe nicht auch noch da rein??

MfG
 
also was pcw da gebaut hat, funktioniert so schon. wenn du mit ausgabe, irgendwas auf der kommandozeile meinst: lass die finger von so etwas in rekursiven funktionen. ;-)

wenn du den index erhöhen willst, kriegst du streß mit den beiden anfangsbedingungen, der abbruchbedingung und der schrittweite. es einfacher die aufrufe von oben durchzugehen, bis man bei einer eins angekommen und die rekursion dann abzubrechen.

nimm dir am besten mal zettel und stift und probier den rekursiven aufruf aus. am besten malst du dir dafür einen baum, der sich bei dem rekursiven aufruf teilt und schreib dir an jeden ast den parameter dran. das klingt jetzt vllt ein bisschen albern, aber das ist die beste methode zu verstehen, was da abgeht. ;-)

achja: falls sich dein compiler aufregt, in standard-pascal gibt es result nicht. da müsste die funktion so aussehen:
Code:
function fibonacci(Index:Integer):Integer;
begin
  if Index > 1 then
  begin
    fibonacci:=fibonacci(Index-1)+fibonacci(Index-2);
  end
  else
  begin
    fibonacci:=Index;
  end;
end;
 
jo super danke @pcw und ghorst jetzt klappts.

program fibo;

uses wincrt;

function fibonacci(Index:Integer):Integer;
begin
if Index > 1 then
begin
fibonacci:=fibonacci(Index-1)+fibonacci(Index-2);
end
else
begin
fibonacci:=Index;
end;
end;

var i :integer;

begin
for i:=0 to 10 do
writeln ('Fibo: ',fibonacci(i));
end.
 
Zurück
Oben