#!/usr/bin/perl use strict; use warnings; my $k = $ARGV[0] || 50; my $total = 1; for my $n ( 1 .. $k - 1 ) { if ( $n > $k - $n ) { $total += factorial($k, $n + 1) / factorial( $k - $n ); } else { $total += factorial($k, $k - $n + 1) / factorial( $n ); } } print "Total unique combinations for $k is $total\n"; sub factorial { my ($n, $max, $total) = @_; $total ||= 1; $max ||= 0; return $total if ! $n || $n == $max - 1; @_ = ($n - 1, $max, $total * $n); goto &factorial; }