Re: Recursion
- Posted by DB James <larches at co?cas?.net> Jul 22, 2007
- 525 views
don cole wrote: > > > Hello Anyone, > > }}} <eucode> > constant stuff={"oranges","apples","bananas"} > > -- this is iteration <SNIP> > > --this is recursion > > > Is this correct? > > I notice that recursion uses more code. > > Don Cole Hi Don, Others will maybe give chapter and verse on this, but meanwhile here are some points: - I think I've read that any recursive process can be replaced by a non-recursive one. - Recursion does pile stuff up on the stack (is running separate operations). - Some recursion can be criticized for merely being recursive for the sake of recursion. HOWEVER - Sometimes it is the most elegant way to do something. - Sometimes it is almost spooky in its effectiveness. Here is a paste from RDS' queens.ex that solves a difficult puzzle: finding all the patterns that 8 queens can occupy without threatening each other on a chess board:
procedure place_queen(sequence queens) -- place queens on a NxN chess board -- (recursive procedure) row r -- only need to consider one row for each queen if length(queens) = N then soln += 1 print_board(queens) return end if r = length(queens)+1 for c = 1 to N do if not conflict({r,c}, queens) then place_queen(append(queens, {r,c})) end if end for end procedure
The for-loop uses recursion to poke its nose into all the possibilities and returns the answers, something some major mathematicians failed to do in trying for years. --Quark