Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Recursive loops

by roboticus (Chancellor)
on Dec 11, 2012 at 12:05 UTC ( #1008287=note: print w/replies, xml ) Need Help??

in reply to Recursive loops


None of this hand-wavy stuff is helpful at all. If you want to know if recursion is appropriate for your problem, don't look at the structure of your code--look at the structure of your problem.

Going to the basics: If you can express your problem as a solution to a degenerate case or a transformation on a smaller version of the same problem, then you can generally solve it with recursion. (Whether it's the best method of solution is still undetermined, though.).

For a contrived version, suppose you wanted to find out how many vowels are in a string. A stupid recursive solution could be done like so:

my $t='the quick red fox jumped over the lazy brown dog'; print count_vowels($t); sub count_vowels { my $string = shift; # Check degenerate case: a single character string. if (length($string) == 1) { return 1 if $string =~ /a|e|i|o|u/i; return 0; } # Break the problem into two smaller problems: my ($part1, $part2) = (substr($string,0,1), substr($string,1) ); return count_vowels($part1) + count_vowels($part2); }

Note: Yes, I've oversimplified a bit.


When your only tool is a hammer, all problems look like your thumb.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1008287]
and nobody stirs...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (10)
As of 2017-07-25 09:34 GMT
Find Nodes?
    Voting Booth?
    I came, I saw, I ...

    Results (369 votes). Check out past polls.