Eh teraz chyba mam problem z rekurencją.
Zadanie polega na tym, żeby znaleźć w trójkącie największą sumę liczb.
Przykładowy trójkąt:
1
1 1
1 1 1
1 5 1 1
I tutaj wynikiem jest 8. Po trójkącie poruszamy się w następujący sposób:
W dół lub w dół o jeden w lewo. Napisałem do tego następujący program z funkcją rekurencyjną:
function foo(suma : integer; x : integer; y : integer) : integer;
var
w1, w2 : integer;
begin
if y = wysokosc - 1 then
begin
foo := max(suma + tablica[x + 1][y + 1], suma + tablica[x][y + 1]);
//writeln(suma);
end
else
begin
w1 := foo(suma + tablica[x][y + 1], x, y + 1);
w2 := foo(suma + tablica[x + 1][y + 1], x + 1 , y + 1);
writeln(w1, ' ', w1);
foo := max(w1, w2);
end;
end;
begin
for i := 1 to M do
for j := 1 to M do
tablica[i][j] := 0;
read(wysokosc);
if wysokosc < 1 then
writeln('bledne dane')
else
begin
for i := 1 to wysokosc do
begin
for j := 1 to i do
read(tablica[i][j]);
end;
maks := foo(tablica[1][1], 1, 1);
WriteLn('<', maks, '>');
end;
end.
I nie mam pojęcia dlaczego w kolejnych wywołaniach argument suma nie zwiększa się.
PS. Osobny post, żeby był widoczny.