IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> ПОЛИНОМЫ ЭРМИТА (рекурсия), ПОМОГИТЕ ПЛИЗЗЗ ЗАДАЧУ РЕШИТЬ...
FROL*[night_sniper]
сообщение 3.04.2006 21:56
Сообщение #1


Гость






Задача такая:
Написать программу для вычисления n-ого полинома эрмита в заданной точке X. Исходные данные - порядок полинома и значение X.
Hn(x) удовлетворяют рекуррентной формуле (где Hn(x) - полином n-ого порядка в точке x):
Hn+1(x) = 2*x*Hn(x)-2*n*Hn-1 (x)
H0(x) = 1,
H1(x) = 2*x.

нужно рекурсивное решение.

в моём поимании рекурсии (видимо ошибочно) функция просто вызывает сама себя (ну там стэк при этом переполняется и всё такое...)... так вот, в моём исполнении при нахождении полинома более чем девятого порядка, эта сволочь пишет об ошибке с плавающей точкой... не знаю чё и делать...
заранее благодарен)))
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 3.04.2006 22:41
Сообщение #2


Гость






Во-первых: зациклить рекурсию не боишься?
function pol(n:integer; x:real):real;
begin
if n=0 then pol:=1 else
if n=1 then pol:=2*x else
pol:=2*x*pol(n,x)-2*n*pol(n-1,x); { <--- Здесь 2*x*pol(n, x) !!! }
end;


Ты передашь то же самое N, с которым вошел в рекурсию, зацикливаешься, и получаешь гарантированно переполнение стека.
Ну и второе... Я не знаю, с какими значениями X ты запускаешь программу, но все-таки используй более емкие сопроцессорные типы, например Double...

Я бы делал так:

{$N+} { Для подключения сопроцессора }
function pol(n: integer; x: double): double;
begin
if n=0 then pol:=1
else
if n=1 then pol:=2*x
else
pol:=2*x*pol(n-1, x)-2*n*pol(n-2, x);
end;
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 11.08.2025 1:55
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"