Here is the code:

...
            } else {
                return factors($q, @f);
            }
...

Return the values during recursive calls too.

Output:
[2 2 5]
2
2
5

Simon Proctor @ 2022-06-16 19:07 +01:

> 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.

Attachment: signature.asc
Description: PGP signature

Reply via email to