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.