Курс языка программирования 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. Оригинальный текст на английском языке.

Переводы этой страницы: EnglishDeutschEspañolItalianoLatviešuNederlandsБългарскиРусскийУкраїнська