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

Рекурсивна подпрограма

Рекурсивна е подпрограмата, която извиква сама себе си. Класическият пример е факториелът: факториелът на n е n, умножено по факториела на n - 1.

sub fact($n) {
    $n <= 1 ?? 1 !! $n * fact($n - 1);
}

say fact(5); # 120

Прочетете тялото като два случая, свързани с тернарния оператор ?? !!:

  • когато $n е 1 или по-малко, отговорът е просто 1;
  • иначе отговорът е $n, умножено по fact($n - 1) — същата подпрограма, извикана с по-малко число.

Всяко извикване обелва по един множител и иска по-малък факториел, докато числото стигне 1 и извикванията се развият обратно: fact(5) е 5 * fact(4), което е 5 * 4 * fact(3), и така надолу до 1.

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

Практика

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

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

Рекурсия   |   Тест — Рекурсия


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