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.