Вся сложность рекурсивных алгоритмов заключается в том, что внутри одной функции запустится другая.
Запускается F(5)
n>0? 5>0? - Да.
Выводится звёздочка, Запускается F(3), потом F(4), потом F(4) и снова выводится звёздочка (если все эти команды под условие попадают, а то у вас табуляция не расставлена)
На данный момент мы имеем 2 звёздочки и ещё 3 функции, которые должны быть выполнены.
Начнём с F(3)
3>0? Да. Тогда:
Выводится звёздочка, Запускается F(1), потом F(2), потом F(2) и снова выводится звёздочка
Уже 4 звёздочки
Нам осталось 2 раза выполнить F(2) (результаты у них будут одинаковые)
2 раза F(4) и F(1)
Запустим F(1):
1>0? Да.
Выводится звёздочка, Запускается F(-1), потом F(0), потом F(0) и снова выводится звёздочка
Звёздочек 6.
F(-1): -1>0? Нет. Ничего не делаем
F(0): 0>0? Нет. Ничего не делаем
F(2):
2>0
Выводится звёздочка, Запускается F(0), потом F(1), потом F(1) и снова выводится звёздочка
Уже 8 звёздочек
И 2 раза выводим F(1), а каждое F(1) даёт нам по 2 звёздочки
Итог: 12 звёздочек.
F(2) надо выполнить 2 раза, то бишь ещё 6 звёздочек, итог 18
Осталось 2 раза выполнить F(4)
4>0
Выводится звёздочка, Запускается F(2), потом F(3), потом F(3) и снова выводится звёздочка
20 звёздочек + 6 от F(2) + 16 от F(3) + 16 от F(3) = 58 звёздочек
F(4) выполняем второй раз 58+40=98 звёздочек - ответ
В дополнение прикреплю визуальное решение, оно должно быть попроще:
var
a:array[1..n] of integer;
i,s,k:integer;
begin
Randomize;
for i:=1 to n do
begin
a[i]:=random(51)-25;
write(a[i]:4);
end;
writeln;
s:=0; k:=0;
for i:=1 to n do
if a[i]<0
then begin s:=s+a[i]; k:=k+1; end;
writeln('s = ',s,' k = ',k);
end.
Пример:
21 5 -11 -6 -14 -9 1 -25 9 5
s = -65 k = 5