Rekurencja - procedura nie wywołuje się sama

Rekurencja - procedura nie wywołuje się sama
Wazka260196
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 52
0

Witam! Mam taką oto procedurę do wyszukiwania drogi w grafie (na razie jej zarys) ale przy sprawdzaniu za pomocą debuggera jej działania zobaczyłem, że dziadostwo nie chce się samo wywołać. Opisane jest to w kodzie. Dodam tylko, że używam Delphi 2005 i pierwszy raz spotykam się z czymś takim. Ktoś może wyjaśnić dlaczego tak się dzieje? Przy trybie pracy krokowej po prostu program przechodzi sobie przez to wywołanie i nic z tego nie robi.

Deklaracja typów:

Kopiuj
  type
  TFindRoute = record
    WhereFromIndex : Integer;
    Distance : Integer;
    end;

type
  TNode = record
    X : Integer;
    Y : Integer;
    Connections : array of Integer;
    FindRoute :  TFindRoute;
    end;

Kod:

Kopiuj
procedure TForm1.FindPath(StartPointIndex : Integer ; Generation : Integer);
var
i : Integer;
a : Integer;
Index : Integer;
begin

if NodeTable[StartPointIndex].FindRoute.WhereFromIndex = -1 then
  begin
  for Index in NodeTable[StartPointIndex].Connections do
    begin
    NodeTable[Index].FindRoute.WhereFromIndex:=StartPointIndex;
    FindPath(Index,0); // zupełnie ignoruje
    
    end;
  end
end;
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Może lepiej wklej deklaracje dla NodeTable oraz jej wypełnienie.

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12270
0

@Wazka260196 - metoda zostanie wywołana rekurencyjnie tylko wtedy gdy warunek zostanie spełniony oraz jeśli mecierz Connections nie jest pusta; Więc jeśli metoda nie wywołuje się rekurencyjnie to znaczy, że albo warunek nie został spełniony, albo macierz jest pusta;

Sprawdź więc pod debugerem czy warunek zostaje spełniony i co zawiera macierz Connections, a będziesz wiedział dokładnie dlaczego tak się dzieje, a nie inaczej.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.