Pure recursive functions
- To: mathgroup at smc.vnet.net
- Subject: [mg38341] Pure recursive functions
- From: Niall Palfreyman <niall.palfreyman at fh-weihenstephan.de>
- Date: Thu, 12 Dec 2002 01:36:47 -0500 (EST)
- Organization: Fachhochschule Weihenstephan
- Sender: owner-wri-mathgroup at wolfram.com
Hello,
I'm new to Mathematica, and I have a question to which I've found no
answers in the archives. Can you help?
The issue is: how do I create a pure recursive function? Normally when
creating a recursive function I use the name of the function to perform
the recursive call:
fact[n_] :=
If[n == 1, 1, n fact[n - 1]]
However this has the disadvantage that the symbol "fact" is now global.
The logical step to make the name of the function local is something
like:
Function[factl, factl[5]] @@ {Function[n, If[n == 0, 1, n factl[n -
1]]]}
or maybe:
With[{fact = Function[n, If[n == 0, 1, n fact[n - 1]]]}, fact[5]]
However both of these solutions steadfastly return the value "5
fact[4]". I assume the problem is that the variables initialised in
Function[] and With[] must be symbols, and cannot be patterns. But a
recursion requires a pattern (n_ in the first, global, solution above).
What do I do to get factorial to work _without_ making the symbol "fact"
global?
I'd be grateful for any help.
Thanks,
Niall.