Статья Автор: Деникина Н.В., Деникин А.В.

Типичные ошибки

Ошибка 1: Забыли возврат (удаление из списка)

АЛГОРИТМ СломанныйПоиск(решение, осталось)
    ЕСЛИ осталось = 0 ТО
        ВЫВЕСТИ решение
        ВЫЙТИ ИЗ АЛГОРИТМА
    КОНЕЦ ЕСЛИ
    
    ДЛЯ КАЖДОЙ цифры ИЗ [1, 2, 3] ВЫПОЛНЯТЬ
        ДОБАВИТЬ цифру В КОНЕЦ решение
        СломанныйПоиск(решение, осталось - цифра)
        // Забыли УДАЛИТЬ ПОСЛЕДНИЙ ЭЛЕМЕНТ!
    КОНЕЦ ЦИКЛА
КОНЕЦ АЛГОРИТМА

Результат: [1,1,1], [1,1,1,2], [1,1,1,2,3]... — список растёт бесконечно!


Ошибка 2: Нет базового случая

АЛГОРИТМ Бесконечность(решение, осталось)
    ДЛЯ КАЖДОЙ цифры ИЗ [1, 2, 3] ВЫПОЛНЯТЬ
        ДОБАВИТЬ цифру В КОНЕЦ решение
        Бесконечность(решение, осталось - цифра)
        УДАЛИТЬ ПОСЛЕДНИЙ ЭЛЕМЕНТ ИЗ решение
    КОНЕЦ ЦИКЛА
    // Нет условия остановки!
КОНЕЦ АЛГОРИТМА

Алгоритм никогда не остановится (пока не закончится память)


Ошибка 3: Отсечение после рекурсии

// Неправильно:
Поиск(решение, осталось - цифра)
ЕСЛИ осталось < 0 ТО ВЫЙТИ    // уже поздно!

// Правильно:
ЕСЛИ осталось < 0 ТО ВЫЙТИ    // сначала проверка
Поиск(решение, осталось - цифра)

Тратим время на заведомо неверные ветки

Печать