Информация об изменениях

Сообщение Re: Принудительный выход из рекурсии в случае, если ответ уж от 20.11.2020 17:36

Изменено 20.11.2020 17:37 Буравчик

Re: Принудительный выход из рекурсии в случае, если ответ уже найден
Здравствуйте, Lazytech, Вы писали:

L>Что скажете, имеет ли такой подход с превентивным выходом из рекурсии право на существование? Оговорюсь, что вышеприведенный лог относится к единственному подвернувшемуся мне тестовому случаю, в котором этот подход мог быть мало-мальски полезен. Вполне возможно, что я чего-то недопонимаю...


Если понадобится "резко" завершить рекурсивные вызовы — такой подход, норм.

Но, думаю, такая необходимость встречается редко. Если проблема появилась, скорее всего неверное спроектирована функция рекурсии.

Питон (без флагов остановки)
def is_merge(s, part1, part2):
    if part1 == '':
        return s == part2
    if part2 == '':
        return s == part1
    if s == '':
        return False
    return s[0] == part1[0] and is_merge(s[1:], part1[1:], part2)            or s[0] == part2[0] and is_merge(s[1:], part1, part2[1:])
Re: Принудительный выход из рекурсии в случае, если ответ уж
Здравствуйте, Lazytech, Вы писали:

L>Что скажете, имеет ли такой подход с превентивным выходом из рекурсии право на существование? Оговорюсь, что вышеприведенный лог относится к единственному подвернувшемуся мне тестовому случаю, в котором этот подход мог быть мало-мальски полезен. Вполне возможно, что я чего-то недопонимаю...


Если понадобится "резко" завершить рекурсивные вызовы — такой подход норм.

Но, думаю, такая необходимость встречается редко. Если проблема появилась, скорее всего неверно спроектирована функция рекурсии.

Питон (без флагов остановки)
def is_merge(s, part1, part2):
    if part1 == '':
        return s == part2
    if part2 == '':
        return s == part1
    if s == '':
        return False
    return s[0] == part1[0] and is_merge(s[1:], part1[1:], part2) \
           or s[0] == part2[0] and is_merge(s[1:], part1, part2[1:])