Think about Loose Coupling PerlMonks

### Re^2: Finding the max()/min()

by sleepingsquirrel (Hermit)
 on Nov 11, 2004 at 19:47 UTC ( #407163=note: print w/replies, xml ) Need Help??

in reply to Re: Finding the max()/min()
in thread Finding the max()/min()

Your recursive version of max is broken for lists like (-1,0,1,2) and (-1,undef,1,2). i.e. the code assumes it is at the end of the list whenever \$next==0 or \$next==undef (which isn't true in general). Here's a snazzy (if not the most efficient) recursive version with a hat tip to Zaxo...
```sub max {
my (\$x, @xs) = @_;
@xs ? (\$x, max(@xs))[\$x < max(@xs)] : \$x
}

-- All code is 100% tested and functional unless otherwise noted.

Replies are listed 'Best First'.
Re^3: Finding the max()/min()
by Ven'Tatsu (Deacon) on Nov 11, 2004 at 22:02 UTC
Your solution is calling max(@xs) twice each step. This leads to O(2^n) growth for what should be an O(n) problem. Modifying it slightly to call max once and save the value in a temp variable should save considerable time on long lists.
```sub max {
my (\$x, @xs) = @_;
@xs ? do { my \$m = maxdo(@xs); (\$x, \$m)[\$x < \$m] } : \$x;
}

Create A New User
Node Status?
node history
Node Type: note [id://407163]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (3)
As of 2017-08-22 23:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
Who is your favorite scientist and why?

Results (344 votes). Check out past polls.

Notices?