I think, and I don't have my computer to hand to double check but I think
you want a return before your recursive.call to factors passing in @f.
When dealing with recursive functions you need to make sure what you're
returning back up the stack.



On Thu, 16 Jun 2022, 18:10 Rick Bychowski, <r...@hiranyaloka.com> wrote:

> Hi Everyone,
>
> I've been lurking quite a while, this will be my first post to perl6
> users. I've written a lot of short scripts in perl5 for system admin
> type stuff at home and work. Lately I'm playing with Raku, which is a
> lot of fun. Error reporting is excellent, as is the online documentation.
>
> To the point. I recently started the perl weekly challenge. Lots of
> math/primes stuff. I wrote an algorithm to list all the prime factors of
> an integer, using a recursive subroutine. I'm able to print the result
> from the subroutine, but it always returns Nil. What am I missing?
>
> #!/usr/bin/env raku
>
> sub MAIN($n = 20) {
>     .say for factors($n); # Nil
> }
>
> sub factors($n, @factors?) {
>      my @f = @factors.elems ?? @factors !! ();
>      my $q;
>      for 2 ..^ $n -> $i {
>          if $n %% $i {
>              $q = Int($n / $i);
>              @f.push($i);
>              if $q.is-prime {
>                  @f.push($q);
>                  say @f;    # [2 2 5]
>                  return @f;
>              } else {
>                  factors($q, @f);
>              }
>              last;
>          }
>      }
> }
>
> Returns
> [2 2 5]
> Nil
>
> --
> Rick Bychowski
>
> The information in this email is confidential and may be legally
> privileged. It is intended solely for the addressee(s). Access to this
> e-mail by anyone else is unauthorized.
>

Reply via email to