Курс по Raku / Основи / Повече за функциите / Упражнения / Факториел с мулти-функции
Решение: Факториел с мулти-функции
Това упражнение е отново за факториали. Всъщност, задачата ни позволява да илюстрираме повече възможности на Raku.
Когато изчислявате факториал, започвайки от даденото число и намалявайки надолу, трябва да спрете, когато числото стане 1. С мулти-функции можете да постигнете това, като извлечете случая с $n == 1
в отделна мулти-функция.
Код
Ето решението:
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
, и първият мулти-вариант не може да улови извикването. За разлика от това, когато factorial(2 - 1)
се извиква рекурсивно, аргументът на функцията е цяло число, което прави възможно извикването на първия вариант.
Навигация по курса
← Създаване и извикване на функции / Стойности по подразбиране | Вградени функции за принтиране →
Тази страница е автоматично преведена с ChatGPT 4.0. Оригинален текст на английски
Преводи на тази страница: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська