Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Избежать глубокой рекурсии 
V
    Опции темы
flagist0
Дата 29.7.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.10.2007

Репутация: нет
Всего: нет



Пишу простенький генератор сишного кода. Выбор текущего действия происходит так: 
Код

def gen_code_string(self,indent):
        code_type = ("declaration","assignment","call","if","return" ...)
        action = random.choice(code_type)
        if action == "declaration":
            self.gen_declaration(indent)
        elif action == .....


В случае генерации блока {}, метод gen_block() вызывает gen_code_string() для генерации содержимого блока, получается рекурсия. Как видно, действие выбирается случайным образом, поэтому вероятность ухода в глубокую рекурсию невелика, но это почему-то происходит сразу же. 

Думал над двумя вариантами:
1. Сгруппировать действия по убыванию необходимости частого появления, потом изменить функцию распределения. Но как? 
2. Передавать в метод текущую глубину рекурсии, при необходимости выходить. 

Это моя первая программа на Python, прошу сильно не бить.
PM MAIL GTalk   Вверх
flagist0
Дата 29.7.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.10.2007

Репутация: нет
Всего: нет



Цитата

Думал над двумя вариантами:
1. Сгруппировать действия по убыванию необходимости частого появления, потом изменить функцию распределения. Но как? 
2. Передавать в метод текущую глубину рекурсии, при необходимости выходить. 

Второй вариант сработал. Хотя первый вариант был бы предпочтительнее (дал бы очень приятный сайд-эффект правильного распределения видов кода), этот тоже работает. 
Вопрос закрыт.
PM MAIL GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.