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

Отсечение

Задача: найти все числа из цифр [1, 2, 3], у которых сумма цифр равна 3.

Если сумма уже больше 3 — дальше можно не проверять! Это называется отсечение.

АЛГОРИТМ НайдиЧисла(текущее, осталось_до_суммы)

    // Отсечение: сумма превысила цель
    ЕСЛИ осталось_до_суммы < 0 ТО
        ВЫЙТИ ИЗ АЛГОРИТМА      // дальше искать бессмысленно
    КОНЕЦ ЕСЛИ
    
    // Базовый случай: сумма достигнута!
    ЕСЛИ осталось_до_суммы = 0 ТО
        ВЫВЕСТИ текущее          // выводим решение
        ВЫЙТИ ИЗ АЛГОРИТМА
    КОНЕЦ ЕСЛИ
    
    // Перебираем цифры
    ДЛЯ КАЖДОЙ цифры ИЗ [1, 2, 3] ВЫПОЛНЯТЬ
        новое ← текущее + цифра
        НайдиЧисла(новое, осталось_до_суммы - цифра)
    КОНЕЦ ЦИКЛА

КОНЕЦ АЛГОРИТМА

// Запуск: ищем числа с суммой цифр = 3
НайдиЧисла("", 3)

Результат: 111, 12, 21, 3

Комбинация «13» не выводится, потому что 1+3=4 > 3 (отсечение!)

Зачем отсечение? Экономит время! Не проверяем заведомо неверные варианты.
Печать