Что такое рекурсия?

«Что такое рекурсия?» — вопрос из категории ООП, который задают на 28% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Рекурсия — это подход в программировании, при котором функция вызывает саму себя (прямая рекурсия) или вызывает другую функцию, которая в итоге приводит к её вызову (косвенная рекурсия). В контексте тестирования важно понимать рекурсию, чтобы тестировать алгоритмы, которые её используют, и избегать связанных с ней ошибок.

Ключевые компоненты рекурсивной функции:

  1. Базовый случай (Base Case): Условие, при котором рекурсия останавливается. Без него функция будет вызывать себя бесконечно.
  2. Рекурсивный шаг (Recursive Step): Вызов функции с изменёнными (обычно упрощёнными) аргументами, приближающими к базовому случаю.

Пример рекурсивной функции для вычисления факториала (Java):

public class RecursionExample {
    public static int factorial(int n) {
        // Базовый случай: факториал 0 или 1 равен 1
        if (n <= 1) {
            return 1;
        }
        // Рекурсивный шаг: n! = n * (n-1)!
        return n * factorial(n - 1);
    }

    public static void main(String[] args) {
        System.out.println(factorial(5)); // Вывод: 120
    }
}

Аспекты, важные для тестировщика:

  • Тестирование граничных условий: Обязательно нужно проверить базовый случай (например, factorial(0), factorial(1)) и случай с небольшим положительным числом.
  • Обработка ошибок: Необходимо тестировать поведение функции при передаче отрицательных чисел (должна быть обработка или корректное завершение).
  • Риск переполнения стека (Stack Overflow): При глубокой рекурсии (например, factorial(100000)) может произойти исчерпание стека вызовов. В тестах на производительность или устойчивость это нужно учитывать. Часто такие алгоритмы переписывают в итеративную форму (с использованием цикла).
  • Понимание кода: Многие алгоритмы (обход деревьев, быстрая сортировка, поиск в глубину) используют рекурсию. Тестировщик должен уметь читать такой код, чтобы понять его логику и составить тестовые сценарии.

Видео-ответы