MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

Pure recursive functions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg38363] Pure recursive functions
  • From: Niall Palfreyman <niall.palfreyman at fh-weihenstephan.de>
  • Date: Fri, 13 Dec 2002 04:09:00 -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 == 0, 1, n fact[n - 1]]

However this has the disadvantage that the symbol "fact" is now global.
The logical step to avoid this seems to be to make the name of the
function local as in something like the following:

Function[fact, fact[5]] @@ {Function[n, If[n==0, 1, n fact[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.


  • Prev by Date: Re: The number of solutions to n_1 + n_2 + n_3 + ... + n_k = m
  • Next by Date: looking for a "test[ 1, ALL ]
  • Previous by thread: Pure recursive functions
  • Next by thread: Re: Pure recursive functions