Помощь - Поиск - Пользователи - Календарь
Полная версия: Рекурсия
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
anaf3r0n
Доброго времени суток всем!

Вычислить сумму ряда:
S:=x^n+x^(n-1)/2+x^(n-2)/3+...+x/n (для данного ряда написать рекуррентную формулу)

с точностью до члена ряда e=0.000001

Вот что написал, но не знаю как с рекурсией быть, как реализовать:

uses crt;
const
e=0.000001;
var
x,x1,x2,n,i,s1:real;

function pow(x,n:real):real;
begin
pow:=exp(n*ln(x));
end;

begin
clrscr;
write('X:= '); readln(x);
write('N:= '); readln(n);
i:=1;
x1:=pow(x,n)/i;
while abs(s1-x2)<=e do begin
x2:=pow(x,n-i)/(i+1);
i:=i+1;
s1:=s1+x2;
end;
writeln(s1+x1);
end.
IUnknown
А при чем тут рекурсия? Разговор в задании идет про рекуррентную, а не про рекурсивную формулу. Это разные вещи вообще-то...
anaf3r0n
Цитата(IUnknown @ 23.10.2011 13:15) *

А при чем тут рекурсия? Разговор в задании идет про рекуррентную, а не про рекурсивную формулу. Это разные вещи вообще-то...


Прошу прощения за не компетентность в данном вопросе. Так как быть с рекуррентной формулой?
IUnknown
Для начала - разобраться, что такое есть рекуррентная формула. Это получение новых данных на основе уже известных. То есть, тебе надо не вычислять xk на каждой итерации, а выяснить, что надо сделать с i-тым членом ряда, чтобы он превратился в (i+1)-ый. Может быть - на что-то его домножить, может быть - разделить, но а результате ты должен уметь из первого члена получить второй, из второго - третий, из третьего - четвертый, и так далее.

Попробуй это реализовать самостоятельно. Хинт: от перемены мест слагаемых сумма не меняется. smile.gif
anaf3r0n
Цитата(IUnknown @ 23.10.2011 13:31) *

Для начала - разобраться, что такое есть рекуррентная формула. Это получение новых данных на основе уже известных. То есть, тебе надо не вычислять xk на каждой итерации, а выяснить, что надо сделать с i-тым членом ряда, чтобы он превратился в (i+1)-ый. Может быть - на что-то его домножить, может быть - разделить, но а результате ты должен уметь из первого члена получить второй, из второго - третий, из третьего - четвертый, и так далее.

Попробуй это реализовать самостоятельно. Хинт: от перемены мест слагаемых сумма не меняется. smile.gif


помочь не сможешь с выводом рекуррентной формулы?
Krjuger
Вот смотри,как изменяеться у тебя твоя формула? Скаждым шагом степерь х уменьшаеться на 1,чтобы этого добиться надо i-тый член делить на х. затем надо разобраться с знаменателими.Смотрим второй член делиться на 2,третий уже на 3,самое простое что приходит в голову это,чтобы получить третий член из второго надо его умножить на 2 и разделить на 3.Теперь обобщим все это и перейдем от чисел к абстракциям.

an:=x^n;//задаем начальное значение,оно же первый член.
for i:=1 to n-1 do
an:=an*i/((i+1)*x);


Почему же цикл до n-1, а не до n...Это изза того что в конце концов мы в знаменателе должны получить деление на n, а по нашей формуле мы делим на I+1.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.