Помощь - Поиск - Пользователи - Календарь
Полная версия: Stack Overflow Error
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Unconnected

function y(i:byte):real;
begin
y:=(y(i-1)+1)/(y(i-1)+2);
end;

var i:byte;
begin
repeat
inc(i);
until (y(i)-y(i-1))<0.00001;
writeln('Iskomoe chislo - ',i);
readln;
end.



Этот код компилируется с ошибкой Stack Overflow Error. TP7.
Задание в оригинале:
Цитата
2...Пусть Y(0)=0; Y(i)=(Y(i-1)+1)/(Y(i-1)+2), i=1,2,3,... Найти первый член Y(n), для которого Y(n)-Y(n-1)<0.00001.
volvo
Цитата
Этот код компилируется с ошибкой Stack Overflow Error.
Не так. Компилируется-то этот код нормально, а вот при запуске программы - вылет с указанной ошибкой... А все почему? Потому, что у тебя там рекурсия бесконечная. Где условие выхода из рекурсии? У тебя ж в задании написано, что Y(0) = 0, почему ты это не сказал своей фунции?

Добавлено через 1 мин.
P.S. На всякий случай: не забудь присвоить значение переменной I, перед тем, как ее использовать.
Unconnected
Цитата
Где условие выхода из рекурсии? У тебя ж в задании написано, что Y(0) = 0, почему ты это не сказал своей фунции?


Немного тупой вопрос...А как это нужно было сказать? Как я понимаю, условие выхода из рекурсии -
until (y(i)-y(i-1))<0.00001;
, разве не так?
volvo
Нет-нет... У тебя прежде, чем выполнение дойдет до разности и сравнения ее с погрешностью, надо чтобы закончилась работа функции, да? Вот у тебя этого не происходит... Попробуй:
function y(i:byte):real;
begin
if i = 0 then y := 0 { <--- Вот оно, условие выхода }
else y:=(y(i-1)+1)/(y(i-1)+2);
end;
Unconnected
Спасибо, Volvo! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.