MathGroup Archive 2002

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

Search the Archive

Re: Pure recursive functions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg38391] Re: Pure recursive functions
  • From: atelesforos at hotmail.com (Orestis Vantzos)
  • Date: Fri, 13 Dec 2002 04:10:24 -0500 (EST)
  • References: <at9de0$q4r$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Use Block:
Block[{fact=If[#>0,# fact[#-1],1]&},fact[5]]
returns 5!

You can also use Module:
Module[{fact},
fact[n_]/;n>0 := n fact[n-1];
fact[0]=1;
fact[5]]
also returns 5!

Orestis Vantzos





Niall Palfreyman <niall.palfreyman at fh-weihenstephan.de> wrote in message news:<at9de0$q4r$1 at smc.vnet.net>...
> 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.


  • Prev by Date: Re: Pure recursive functions
  • Next by Date: Re: PlusMinus Operator Question
  • Previous by thread: Re: Pure recursive functions
  • Next by thread: Re: Pure recursive functions