#!/usr/bin/ruby

#
## https://rosettacode.org/wiki/Factorial
#

# Recursive
func factorial_recursive(n) {
    n == 0 ? 1 : (n * __FUNC__(n-1));
};
 
# Iterative with Array#reduce
func factorial_reduce(n) {
    1..n -> reduce('*');
};
 
# Iterative with Block#repeat
func factorial_iterative(n) {
    var f = 1;
    {|i| f *= i } * n;
    return f;
};
 
# Built-in Number#factorial:
say 5!;