Другие языки программирования и технологии

Напишите программу для расчета среднего арифметического всех элементов числового массива рекурсией

Рекурсии - они разные бывают. Соответственно - и эту задачу тоже можно по разному через рекурсию сделать.. . Можно через хвостовую рекурсию. А можно через обычную. Тебе - какой лучше?
Вот смотри:
(define ave (lambda (l)
(let loop((res 0)(l l)(n 0))
(if (null? l) res
(loop (/ (+ (car l)(* res n))(+ n 1))(cdr l)(+ n 1))))))
(display (ave '(1 2 3 4)))(newline)

Здесь определяется внутренняя рекурсивная функция loop с тремя параметрами:
res - промежуточный результат,
l - промежуточный список элементов
n - количество обработанных элементов списка.

Если список пустой, то вернуть res как результат
Иначе воспользоваться формулой: A(n+1) = (m[n+1] + A(n)*n)/(n+1)
и вызвать loop с новым промежуточным результатом: (/ (+ (car l)(* res n))(+ n 1))
уменьшенным на один элемент массивом: (cdr l) и увеличенным на 1 n: (+ n 1)

Это вариант с хвостовой рекурсией.
Данил Горбатюк
Данил Горбатюк
84 351
Лучший ответ
Давайте лучше напишем программу ГОЭЛРО?
KK
Kesha Kesha
34 535
Delphi (при некоторой модификации и Pascal):
{$apptype console}

const
SIZE = 10;

type
TArray = array [1 .. SIZE] of integer;

procedure Fill(var aValue: TArray);
var
i: integer;
begin
Randomize();
for i := Low(aValue) to High(aValue) do
aValue[ i] := Random(50);
end;

function Get(aValue: TArray): real;

procedure GetAvg(aValue: TArray; idx, count, sum: integer; var res: double);
begin
if (idx = High(aValue)) then
begin
Inc(sum, aValue[idx]);
Inc(count);
res := sum/count;
end
else begin
GetAvg(aValue, idx + 1, count + 1, sum + aValue[idx], res);
end;
end;

var
res: double;
begin
GetAvg(aValue, Low(aValue), 0, 0, res);
Get := res;
end;

procedure Print(aValue: TArray);
var
i: integer;
begin
for i := Low(aValue) to High(aValue) do
write(aValue[ i]:3, ' ');
writeln;
end;

var
a: TArray;
begin
Fill(a);
Print(a);
writeln('Result = ', Get(a):5:3);
readln;
end.
с точки зрения банальной эрудиции, если посмотреть сверху, то с низу мы видим, что по краям нихрена нет!!!

Похожие вопросы