August 1999 Perl Hardware Store Slide #37

# Take a list of numbers and a target # sum. return a sublist that add up to # the target, if possible, or undef
# otherwise.

         sub T {
           my ($list, $target) = @_;
           my $answer;
           if (@$list == 0) { 
             return ($target == 0) ? [] : undef 
           }
           my $first = shift @$list;
           $solution = T($list, $target); 
           unless (defined $solution) {  
             $solution = T($list, $target - $first);
             if (defined($solution)) {
               unshift @$solution, $first;
             }
           }
           # restore @$list
           unshift @$list, $first;        
           return $solution;
         }


Next Copyright © 1998 M-J. Dominus