OberonCore https://forum.oberoncore.ru/ |
|
Проблема. Рекурсивная процедура. Что-то не так... https://forum.oberoncore.ru/viewtopic.php?f=35&t=6927 |
Страница 1 из 1 |
Автор: | tovit [ Четверг, 06 Апрель, 2023 16:30 ] |
Заголовок сообщения: | Проблема. Рекурсивная процедура. Что-то не так... |
Вот такой, без деталей, код. CONST N = 8; L = 1; R = 18; PROCEDURE AnyThing; BEGIN END AnyThing; PROCEDURE Srch ( i : INTEGER ); VAR k : INTEGER; BEGIN FOR k := L TO R DO IF i < N THEN Srch (i+1) ELSE AnyThing END END END Srch; PROCEDURE Main*; BEGIN Srch (0) END Main; Всё работает, когда N,L,R малы. Стоит поставить так как выше приведено (8, 1, 18), то система зависает. Рискну предположить, что-то типа исчерпания стека? |
Автор: | arisu [ Четверг, 06 Апрель, 2023 17:10 ] |
Заголовок сообщения: | Re: Проблема. Рекурсивная процедура. Что-то не так... |
N вам ограничивает глубину поиска, а R — ширину. вы задали огромное рекурсивное ~(R^N)!-мерное поле поиска. простите, точную формулу сейчас не могу (написаная — чушь, конечно), но там совершенно астрономическое число получается. со стеком всё в порядке (глубина всего N), проблема именно в огромной области, которую всю надо перебрать. при нехватке стека среда просто покажет трап. |
Автор: | tovit [ Четверг, 06 Апрель, 2023 17:24 ] |
Заголовок сообщения: | Re: Проблема. Рекурсивная процедура. Что-то не так... |
R^N или N^R?... Да, Трап выкидывает. Но не всегда, чаще просто виснет, приходится принудительно завершать ББ и снова запускать. В общем, я, конечно, понимал, что широкий и глубокий поиск. Но смутило, что во FPC и PascalABC.NET работает. Конечно, безмерно долго, но, по крайней мере, не виснет. |
Автор: | arisu [ Четверг, 06 Апрель, 2023 17:35 ] |
Заголовок сообщения: | Re: Проблема. Рекурсивная процедура. Что-то не так... |
да фиг его знает, какие там степени, я специально ещё и факториал воткнул, чтобы окончательно испугать. идея не в том, чтобы точно вычислить всё поле, а чтобы испугаться как следует. и да, оно не виснет, оно работает. просто компилятор в BB не старается в оптимизации, разумно предполагая, что оптимизация алгоритмов человеком даст больший выигрыш, чем куча хрупкого и подверженого ошибкам кода оптимизатора. собственно, все виртовские компиляторы написаны в таком стиле. |
Автор: | tovit [ Четверг, 06 Апрель, 2023 17:38 ] |
Заголовок сообщения: | Re: Проблема. Рекурсивная процедура. Что-то не так... |
спасибо, что откликнулись. перепишу в итеративном варианте. хотя в рекурсивном красивее и нагляднее. спасибо. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |