Recur8. Описать рекурсивную функцию RootK($$X$$, $$K$$, $$N$$) вещественного типа, находящую приближенное значение корня $$K$$-й степени из числа $$X$$ по формуле: $$Y_0=1$$,$$Y_{N+1}=Y_N — (Y_N — X/(Y_N)^{K-1})/K$$, где $$Y_N$$ обозначает RootK($$X$$, $$K$$, $$N$$) при фиксированных $$X$$ и $$K$$. Параметры функции: $$X$$ $$(>0)$$ — вещественное число, $$K$$ $$(>1)$$ и $$N$$ $$(>0)$$ — целые. С помощью функции RootK найти для данного числа $$X$$ приближенные значения его корня $$K$$-й степени при шести данных значениях $$N$$.
Преобразуем формулу $$Y_{N+1}=Y_N — (Y_N — X/(Y_N)^{K-1})/K$$
, к виду который мы можем решить на паскале:
- сначало избавимся от N+1 в левой части уравнения:
$$Y_{N}=Y_{N-1} — (Y_{N-1} — X/(Y_{N-1})^{K-1})/K$$
2. Дальше избавимся от возведения в степень $$(Y_{N-1})^{K-1}$$, по формуле:
$$X^Y = exp(ln(X) * Y)$$
в нашем случае:
$$(Y_{N-1})^{K-1}=exp(ln(Y_{N-1})*(K-1))$$
получаем:
$$Y_{N}=Y_{N-1} — (Y_{N-1} — X/(exp(ln(Y_{N-1})*(K-1))))/K$$
И решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
program Recur8; var X,K,N,i:integer; Function RootK(X:real;K,N:integer):real; begin if N=0 then RootK:=1 else RootK:=RootK(X,K,N-1)-(RootK(X,K,N-1)-X/(exp(ln(RootK(X,K,N-1))*(K-1))))/K; end; begin Write('X: '); Readln(X); Write('K: '); Readln(K); for i:=1 to 6 do begin Write('N: '); Readln(N); Writeln(RootK(X,K,N)); end; end. |
Другие задачи из раздела Recur можно посмотреть здесь.
Комментарии: