Предел глубины рекурсии.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Предел глубины рекурсии.

Сообщение Mikle » 06.02.2007 (Вт) 12:10

Сразу говорю - пользовался поиском, но мало, последнее время конференция жутко тормозит.

Столкнулся с проблемой - при достижении глубины рекурсии что-то в пределах 10000, выходит сообщение - переполнение стэка. Очевидно это стэк указателей на функции, а не стэк данных, так как добавление в рекурсивную процедуру большого числа динамических переменных на предельную глубину рекурсии не влияет.
Очевидно, что общий объем ОЗУ тут совершенно не при чем.
Вопрос - можно ли каким-то способом задать новый размер этого стэка?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 06.02.2007 (Вт) 12:51

Можно переписать алгоритм таким образом, чтобы стек не переполнялся :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.02.2007 (Вт) 12:54

Можно, установив переменную среды LINK в /STACK:нужныйразмер
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 06.02.2007 (Вт) 15:24

tyomitch
То есть я скомпилирую программу с нужным стеком, но отлаживать ее в интерпретаторе не получится?
RayShade
Я уже переписал, но решение в следующий раз может пригодиться. Если рекурсивная процедура вызывает сама себя не фиксированное число раз, то переписывать ее, эмулируя рекурсию, довольно сложно и получается гораздо больше кода.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 07.02.2007 (Ср) 5:28

Такая же проблема возникала у меня... :(
Mikle
Если это по ландшафту, то я изменил способ построения дерева, только вот артефакты иногда появляються! :(
#define ROFL 0xDDDD

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.02.2007 (Ср) 7:33

Mikle писал(а):То есть я скомпилирую программу с нужным стеком, но отлаживать ее в интерпретаторе не получится?

Угу. Но можно рекурсию выделить в отдельный компонент, скомпилировать, и отлаживать всё остальное.
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 07.02.2007 (Ср) 10:11

DirectXManiac
В ландшафте глубина рекурсии больше 9 у меня не бывает.
tyomitch
Это вариант, но рекурсия нужна именно из-за простоты и красоты, а так все теряется. Вот простой пример:
http://tuapse-mikle.narod.ru/Fill.rar
Простая заливка, как в Paint.
Первый вариант - нарекурсии, насколько эффектно и просто!
Второй - эмуляция рекурсии.
Третий - придумал другой алгоритм.
Разница ощутима:(

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 07.02.2007 (Ср) 10:23

Mikle
1.Если делать ландшафт по технологии РОАМ, то там функция вызывает себя до 10000 раз за кадр, что и сбивает скорость! :( А вот по другому методу сложно побороть артефакты. Кстати помнишь ты говорил про разницу между дальним и ближним планом. У меня всё отлично вышло! :) Если что кину пример!
2. Действительно разница заметна. В первый раз вылетело Out Of Call Stack! :(
#define ROFL 0xDDDD

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 08.02.2007 (Чт) 11:55

DirectXManiac
10000 вызовов и глубина рекурсии 10000 - это не одно и то же.
Не понял, ты реализовал дальний и ближний планы, или еще и плавный переход между ЛОДами? Если второе - было бы интересно посмотреть (код не обязательно, просто EXE).


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 107

    TopList