Autor Beitrag
Jasmini
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

Win Millenium
D7
BeitragVerfasst: Mi 01.06.05 22:57 
Aufgaben Stellung:
Zahlenfolge
0,1,1,2,3,5,8,13,21,34
einmal mit 10 Zahlen
dann mit 20 Zahlen

Der Benutzer soll über Buttons entscheiden ob er 10 will oder 20
Ausgegeben wird alles über ein Memo feld!

Ich hab zu meinem Problem mit den Fibonaccizahlen jetzt folgenden Quelltext geschrieben
Der nicht geht !

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button1Click(Sender: TObject);
var Anzahl:Integer;
begin
  Anzahl:=10;
  Memo1.Text:=IntToStr(moeglichkeiten(Anzahl));
end;

function moeglichkeiten(Anzahl:integer):integer;
begin
  case Anzahl of
    1:moeglichkeiten:=1;
    2:moeglichkeiten:=2;
  else
  moeglichkeiten:=moeglichkeiten(Anzahl-1)+moeglichkeiten(Anzahl-2)
  end;
end;

end.


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 01.06.05 23:19 
Jetzt aber:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function moeglichkeiten(Anzahl:integer):integer;
begin
  Assert (Anzahl >= 0,'Anzahl muss >= 0 sein');
  If Anzahl <= 1 then
    Result := Anzahl
  Else
    Result := moeglichkeiten(Anzahl-1) + moeglichkeiten(Anzahl-2)
end;
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Mi 01.06.05 23:28 
Ach herrje, die Fibonaccis rekursiv? :shock: Weißt du, wie lang das dauert/wieviele Funktionsaufrufe das gibt...? Ich denk, die machen wir lieber nicht-rekursiv ;)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button1Click(Sender: TObject);
var aktuell, vorher1,
    vorher2, jahre, i: Integer;
begin
  aktuell := 1;
  vorher1 := 0;
  jahre := strtointdef(edit1.text, 10);

  for i := 0 to jahre-1 do
  begin
    vorher2 := vorher1;
    vorher1 := aktuell;
    aktuell := vorher1 + 2*vorher2;

    memo1.Lines.Add('Im Jahr ' + IntToStr(jahre) + ' sind es ' + IntToStr(aktuell) + ' Hasen');
  end;

end;

_________________
JSXGraph
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 02.06.05 10:11 
das ist ein typischer Fall von DF-Topic erstellen-> Link erhalten-> Link klicken-> Quelltext kopieren-> Wundern, warums nicht funktioniert (weil kein Wort verstanden bzw. gelesen) :roll:
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 02.06.05 19:56 
@raziel: Rekursivität im Unterricht dient nicht dazu, effektiv und schnell zu sein, sondern elegant. Aber, was ich gar nicht mehr verstehe: Was hat die Frage des Threadinitiators mit Hasen zu tun. Oder meinst Du Bunnies (lechz)? :wink:
raziel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2453

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: Do 02.06.05 20:00 
user profile iconalzaimar hat folgendes geschrieben:
@raziel: Rekursivität im Unterricht dient nicht dazu, effektiv und schnell zu sein, sondern elegant. Aber, was ich gar nicht mehr verstehe: Was hat die Frage des Threadinitiators mit Hasen zu tun. Oder meinst Du Bunnies (lechz)? :wink:

Im ersten Posting steht nichts von wegen "Es muss rekursiv implementiert sein" ;) Hasen deshalb, weil das meist als Beispiel genommen wird: Die Vermehrung von Hasen, unter bestimmten Voraussetzungen.

_________________
JSXGraph
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 02.06.05 20:21 
Oh raziel, aber er hat doch eine rekursive Lösung gehabt, die nicht funktionierte, da kann ich ihm doch nicht direkt eine komplett andere Lösung hinschremmeln, nach dem Motto: "Deine Lösung ist sowieso Mist". Ehrlich gesagt finde ich manchmal rekursive Lösungen (z.B. Türme von Hanoi oder Quicksort) im rekursiven Ansatz so elegant, das es einfach schade ist, das durch eine iterative Lösung zu ersetzen.

Ungeachtet dessen MUSS man einfach (so wie Du es correctamente getan hast) darauf hinweisen, das eben rekursive Lösungen i.A. nicht praktikabel sind. Vielleicht ein Thema für einen anderen Thread, oder gleich eine neue Rubrik über "Verfahren allgemein, Ästhetik von Code , Do's and Don'ts of Software Engineering". Da hätten viele etwas von.

Bitte nich mehr schümpfen :bawling:
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 02.06.05 21:20 
Also zum einen: Warum funzt der Code ausm ersten Psoting nicht? Bei mir tut er es ganz gut (bis auf die Tatsache, dass die ersten beiden Zahlen nicht ausgegeben werden, also die Zahlen gegenüber den Fib-Zahlen um 2 verschoben sind.)

@Rekursion: Würde ich auch gerne was zu schreiben, aber dann müsste ich mich selbst ermahnen, wieder zum Thema zurückzukehren. Wenn da noch Diskussionsbedarf besteht: Neuer Thread!

_________________
We are, we were and will not be.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 02.06.05 21:41 
Gute Frage, er funktioniert fast, aber: 0 ist eine Fibionacci-Zahl, und das kann die Funktion nicht. Ich teste Funktionen / Prozeduren immer über die Grenzwerte bzw. Extrema oder Sonderfälle. Wenn das klappt, siehts für den Rest i.A. gut aus.

Rekursion: Ach, ein neuer Thread wär doch mal was. Hier isser.
www.delphi-forum.de/....php?p=258815#258815

Moderiert von user profile iconGausi: DF durch URL-Tags ersetzt. DF ist nur für die DF Suche da ;-)