Wątek przeniesiony 2014-02-06 12:07 z Delphi i Pascal przez ŁF.

Zwracanie błędnej wartości przez funkcję rekurencyjną

0

Witam, nie moge dojsc co robie zle i dlaczego zwraca mi bledna wartosc.

function WyszukajDlaInw(x: string; Tab: array of tmp; i: integer): integer;
Begin

  if x = Tab[i].nazwa then
  Begin
    Result:= Tab[i].id;
  End
  Else if i = Tab[0].wielkosc - 1 then Result:= -1
  Else WyszukajDlaInw(x, Tab, i + 1);

End;

procedure TForm2.Button1Click(Sender: TObject);
var
  szukana: string;
  id: integer;
begin
Form2.VirtualStringTree1.Clear;

  wypelnij(imiona, 0, Tab_Inw, imiona[0].wielkosc);

  if checkbox1.Checked = true then
  Begin
    szukana:= Edit1.Text;
    id:= WyszukajDlaInw(szukana, imiona, 0);
  End;

  ShowMessage(IntToStr(id));

end;

dodanie znacznika <code class="delphi"> - fp

0

Źle zrobione:

  1. Brak formatowania
  2. Bezsensowna konstrukcja struktury
  3. Użycie rekurencji tan gdzie to nie jest wskazane
  4. Brak rozumienia istoty wartości logicznych
  5. Brak rozumienia logiki programu
0

Chodzi mi glownie o ta rekurencje, nie patrz na to co jest w buttonie to jest prowizorka i sprawdzanie. Chce wydostac Tab[i].id zebym wiedzial na ktorym miejscu w tablicy jest dany rekord, potrzebne mi jest to do wyszukiwania inwersyjnego nie chce robic petli ktora bedzie leciala przez cala tablice tylko gdy natknie sie na to co jest szukane wyjdzie i zwroci wartosc

0

Pętla jest o wiele lepsza, ba przynajmniej częściowo będziesz rozumieć kod, bo rekurencji nie rozumiesz.

0

wlasnie o to w tym chodzi ze nie do konca rozumie rekurencji, jedyne co mi sprawia problem, dlatego jakbys mogl prowizorycznie napisac na podstawie tego co podalem ja dla mnie. Wydaje mi sie, ze rekurencja bedzie tu lepszym rozwiazaniem niz petla.

2

Odpowiedź na pytanie czemu nie działa masz w tytule tematu. (teraz już nie, bo dodano słowo błędnej czyli tytuł wątku teraz jest niewłaściwy)
Rekurencja w tym przypadku jest beznadziejnym pomysłem, każde wywołanie funkcji jest znacznie kosztowniejsze niż nawrót pętli oraz rekurencja zapycha stos.

0

No dobra przekonales mnie. :D

0

W pozostałych 4-ch punktach też musisz się przekonać, jak nie wiesz o co chodzi to pytaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1