Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Избежать глубокой рекурсии


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

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, прошу сильно не бить.

Автор: flagist0 29.7.2009, 18:19
Цитата

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

Второй вариант сработал. Хотя первый вариант был бы предпочтительнее (дал бы очень приятный сайд-эффект правильного распределения видов кода), этот тоже работает. 
Вопрос закрыт.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)