Курс языка программирования Raku / Основы / Больше о функциях / Упражнения / Факториал с мульти-функциями
Решение: Факториал с мульти-функциями
Это упражнение снова касается факториалов. Действительно, задача позволяет нам проиллюстрировать больше возможностей Raku.
При вычислении факториала, начиная с заданного числа и идя вниз, нужно остановиться, когда число станет 1. С помощью multi-функций вы можете достичь этого, выделив случай с $n == 1
в отдельную multi-функцию.
Код
Вот решение:
multi sub factorial(1) { 1 }
multi sub factorial($n) { $n * factorial($n - 1) }
say factorial(@*ARGS[0].Int);
🦋 Найдите программу в файле factorial-with-multi-functions.raku.
Вывод
$ raku exercises/more-on-functions/factorial-with-multi-functions.raku 5
120
Комментарий
Обратите внимание, что входной аргумент явно преобразуется в целое число: @*ARGS[0].Int
. Это необходимо для предотвращения бесконечного цикла, когда входное число равно 1
. В этом случае тип параметра, передаваемого функции factorial
, является IntStr
, и первый multi-вариант не может поймать вызов. Напротив, когда factorial(2 - 1)
вызывается рекурсивно, аргумент функции является целым числом, что позволяет вызвать первый вариант.
Навигация по курсу
← Создание и вызов функций / Значения по умолчанию | Встроенные функции для вывода →
Эта страница автоматически переведена с помощью ChatGPT 4o. Оригинальный текст на английском языке.
Переводы этой страницы: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська