PDA

Просмотр полной версии : Сумма n члегов арифметическоё прогрессии с помощью рекурсии!



bars1990
25.06.2009, 11:31
Даны: первый член и разность арифметической прогрессии. Нужно вычислить сумму первых n членов этой прогрессии?
Используя рекурсивную функцию.

P.S. Желательно в среде Microsoft Visual Studio.

Заранее благодарен.

Romeo
25.06.2009, 11:56
Я не знаю, как сделать через рекурсию. Хотя, если извратиться, то наверное можно, но я не понимаю смысла, ведь для вычисления суммы есть готовая формула.

Sn = n * (a1 + an) / 2;

Если учесть, что у нас есть следующие соотношения:

a1 - первый член
d - разность прогрессии
an = a1 + (n-1)*d

То формула для суммы арифметической прогресии превращается в:

Sn = n * (2*a1 + (n-1)*d) / 2 = n*a1 + n*(n-1)*d/2

bars1990
26.06.2009, 15:19
Способа за уделённое внимание.
Я нашел программу по теме, но она на Паскале.
Прошу перегнать её в Си или С++.
uses crt;
procedure pr(var a:integer;p:integer;n:integer;var sum:integer);
begin
if n = 1 then sum:=a
else
begin
pr(a,p,n-1,sum);
a:=a+p;
sum:=sum+a;
end;
end;

var s,a,p:integer;
n:integer;
begin
clrscr;
write('Vvedite A0 : ');readln(a);
write('Vvedite p : ');readln(p);
write('Vvedite n : ');readln(n);
pr(a,p,n,s);
writeln('Sum = ',s);
readln
end.

P.S. Желательно в среде Microsoft Visual Studio.

Заранее благодарен.

Albor
26.06.2009, 17:07
Держи!
CPP Код:

#include <iostream.h>
int pr(int n, int arg, int ras)
{
if(n==1) return arg;
return arg+(n-1)*ras+pr(n-1,arg,ras);
}
void main()
{
cout<<pr(6,1,2);//пример
}

bars1990
26.06.2009, 17:19
Спосибо работает отлично:D
Слушай, а можно реализовать ввод всех параметров с клавы???

Albor
26.06.2009, 17:34
Спосибо работает отлично:D
Слушай, а можно реализовать ввод всех параметров с клавы???
Это просто, напиши сам. конструкция cout<<данные1<<данные2<< и т.д.; выводит на экран, а cin>>имя_переменной; - вводит данные.

bars1990
26.06.2009, 17:38
Я проделал всё это. Работает!!!
Огромное спасибо!!!