Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Функционално програмиране / Рекурсия

Базовият случай

Всяка рекурсивна подпрограма се нуждае от базов случай: условие, при което тя връща отговор, без да се извиква отново. Без него подпрограмата би се извиквала вечно.

При факториела базовият случай беше „$n е 1 или по-малко“. Ето друг пример — обратно броене до нула:

sub countdown($n) {
    return if $n < 1;   # базов случай: спираме
    say $n;
    countdown($n - 1);  # рекурсивна стъпка
}

countdown(3);

Програмата отпечатва:

3
2
1

Първият ред е базовият случай: когато $n падне под 1, подпрограмата се връща незабавно и веригата от извиквания завършва. Рекурсивната стъпка винаги се движи към базовия случай, като извиква countdown с по-малко число.

Ако забравите базовия случай или стъпките никога не стигнат до него, рекурсията не спира и програмата в крайна сметка се проваля. Правилната рекурсивна подпрограма винаги има две неща: базов случай, който прекратява рекурсията, и стъпка, която приближава всяко извикване до него.

Практика

Направете 1 тест върху съдържанието на тази тема.

Навигация в курса

Тест — Рекурсия   |   Тест — Базовият случай


💪 Или преминете направо към упражненията в този раздел.