|
|
scott wrote:
> I added a couple of lines:
OK, fair enough.
> OK, so for your "Other Method" we have:
>
> function sum(list)
> if( list.start() == NULL )
> return 0
> else
> return list.get_value() + sum(list.get_next())
> endif
> end
Or, alternatively,
sum [] = 0
sum (x:xs) = x + sum xs
as we say in Haskell. The English translation was attempting to preserve
the structure without actually using Haskell language syntax. But either
way, you get the idea.
The important thing is you don't say "if the list is empty then *return*
0", you say "if the list is empty then total is *defined as* 0". That's
the main difference. (And yes, it's a conceptual difference rather than
an implementation difference. And that's kind of what I wanted to
hilight - without going into a long technical debate.)
>> And of course, accessing parts of a list requires splitting them, and
>> recusion isn't looping. ;-)
>
> I suspect the recursion method is slower, because calling a function has
> some overheads (storing and recalling registers and return address on
> stack etc).
Not when the compiler can detect tail recursion and transform it into a
normal loop structure automatically.
--
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*
Post a reply to this message
|
|