Рекурсия в C

НАВИГАЦИЯ ПО СТРАНИЦЕ

Рекурсия Основные компоненты рекурсии Пример рекурсивной функции

Рекурсия в программировании — это прием, при котором функция вызывает саму себя для решения задачи.

Рекурсивные функции могут быть мощным средством для решения задач, которые могут быть разбиты на более простые подзадачи. Вот как реализовать рекурсию в языке программирования C:

Основные компоненты рекурсии:

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

  2. Рекурсивный случай: Это случай, в котором функция вызывает саму себя для решения подзадачи. В этом случае параметры вызова функции изменяются так, чтобы приблизиться к базовому случаю.

Пример рекурсивной функции:

Давайте рассмотрим пример рекурсивной функции, вычисляющей факториал числа. Факториал числа n (обозначается как n!) — это произведение всех целых чисел от 1 до n.

#include <stdio.h>

// Рекурсивная функция для вычисления факториала числа
unsigned int factorial(unsigned int n) {
    // Базовый случай: факториал 0 равен 1
    if (n == 0) {
        return 1;
    }
    // Рекурсивный случай: факториал n равен n умножить на факториал (n-1)
    return n * factorial(n - 1);
}

int main() {
    unsigned int n = 5;
    unsigned int result = factorial(n);
    printf("Факториал %u = %u\n", n, result);

    return 0;
}

В этом примере, функция factorial вызывает саму себя с уменьшающимся значением n, пока не достигнет базового случая (когда n становится равным 0). Каждый рекурсивный вызов умножает n на результат факториала для (n-1). Таким образом, мы последовательно умножаем числа от n до 1, что и является факториалом.

При использовании рекурсии важно уделять внимание базовому случаю и гарантировать, что рекурсия завершается. В противном случае может возникнуть бесконечная рекурсия, что приведет к переполнению стека и ошибке выполнения.