Вы просто пытаетесь увеличить egesszamosszeg
( не могли бы вы использовать более простое имя ?) Вместо добавления к нему последовательных чисел.Но ваш цикл неправильный: eggesszamosszeg
равен 0, так что вы на самом деле делаете for n := 1 to 0 do
.Этот цикл никогда не запустится.Не используйте повторно n
, используйте другую переменную для индекса цикла:
for i := 1 to n do
egesszamosszeg := egesszamosszeg + i;
Но вы говорите, что она должна быть рекурсивной, поэтому она должна вызывать себя с другим значением параметра.Затем сделайте что-то вроде:
function egesszamosszeg(n: integer): integer;
begin
if n = 1 then // terminating condition
egesszamosszeg := 1
else
egesszamosszeg := n + egesszamosszeg(n - 1); // recursion
end;
В большинстве Паскалей вы можете использовать псевдо-переменную Result
вместо имени функции.Зачастую это облегчает набор текста.
FWIW, знаете ли вы, что вы можете сделать это немного проще и вообще не нуждаться в рекурсии или итерации?Результат может быть вычислен напрямую:
function egesszamosszeg(n: Integer): Integer;
begin
result := n * (n + 1) div 2;
end;
Для 1..10 это также даст 10 * 11 div 2 = 55
.
См .: https://www.wikihow.com/Sum-the-Integers-from-1-to-N
По сути, вы считаете (1+10) + (2+9) + (3+8) + (4+7) + (5+6) = 5 * 11 = 55
.Вы можете сделать то же самое для любого положительного числа.То же самое с 1..6: (1+6) + (2+5) + (3+4) = 3 * 7 = 21
.Это приводит к формуле:
sum = n * (n + 1) div 2
(или фактически:
n div 2 * (n+1) // mathematically: n/2 * (n+1)
, что то же самое).