全探索アルゴリズムの実装

use strict;
use warnings;
use utf8;
use Data::Dumper;
use Time::HiRes qw(gettimeofday tv_interval);
binmode(STDOUT, ":utf8");

&main;

sub main {
    my $t0 = [gettimeofday];
    $\="\n";

    my $input_n = 5;
    my @n_nums_arr = (1, 5, 7, 10, 21);
    my $input_q = 4;
    my @q_nums_arr = (2, 4, 17, 8);

    my $result;
    for my $q_num (@q_nums_arr) {
        $result = &exhaustive_search_algorithm(0, $input_n, \@n_nums_arr, $input_q, $q_num);

        if ($result == 1) {
            print 'yes';
        } else {
            print 'no';
        }
    }
    my $timer = tv_interval($t0)."\n";
    print "$timer ms\n";
}

sub exhaustive_search_algorithm {
    my ($i, $input_n, $n_nums_arr, $input_q, $q_num) = @_;

    return 1 if ($q_num == 0);
    return 0 if ($i >= $input_n);

    my $num_diff = $q_num - $n_nums_arr->[$i];
    my $res = &exhaustive_search_algorithm($i + 1, $input_n, $n_nums_arr, $input_q, $q_num) ||
              &exhaustive_search_algorithm($i + 1, $input_n, $n_nums_arr, $input_q, $num_diff);
    return $res;
}