MathGroup Archive 2006

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

Search the Archive

Re: Re: $RecursionLimit Bug?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg63962] Re: [mg63939] Re: [mg63932] $RecursionLimit Bug?
  • From: Pratik Desai <pdesai1 at umbc.edu>
  • Date: Wed, 25 Jan 2006 08:45:47 -0500 (EST)
  • References: <200601230911.EAA04880@smc.vnet.net> <200601240630.BAA23611@smc.vnet.net> <76e8f8180601240132g5490a56ey14f1fac802dbb6b4@mail.gmail.com>
  • Sender: owner-wri-mathgroup at wolfram.com

bsyehuda at gmail.com wrote:

> Hi Pratik,
> This will consum too much memory.

Yes you are quite right. Here is a quote from the documentation

> There is of course a trade$B!>(Boff involved in remembering values. It is
> faster to find a particular value, but it takes more memory space to
> store all of them. You should usually define functions to remember
> values only if the total number of different values that will be
> produced is comparatively small, or the expense of recomputing them is
> very great.



> One can make a compromise if the systems stack limit is known (can be
> revealed with some experimentation). Store intermediate results only
> in known points that will prevent the stack overflow
> The following can serve as an example
> f[0]=1;
> f[x_]:=If[Mod[x,10000]==0,f[x]=x f[x-1],x f[x-1]]
> $RecursionLimit=Infinity
> so
> Table[f[x],{x,10000,100000,10000}]
> will store the results in the points determined by the Table iterator
> and the definition of the function

Another idea, if one is so pressed, could be to store the data in a
external table and use SQL type queries to get the required data.

Best Regards,

Pratik

>
> This way of a forward calculation let youget results for f[10*^5 and
> above].
>
> The payment is ofcourse with computation time (the condition is
> checked in each steps) but this gives results in a very resonable time.
> regards
> yehuda
>
> On 1/24/06, *Pratik Desai* <pdesai1 at umbc.edu
> <mailto:pdesai1 at umbc.edu>> wrote:
>
>     W. Craig Carter wrote:
>
>     >Hello,
>     >I am using Mathematica 5.2 on MacOS 10.4.4
>     >
>     >I was trying to construct a cannonical timing example by writing
>     >a memoryless factorial function.
>     >
>     >If I do this (fresh kernel):
>     >
>     >$RecursionLimit = $IterationLimit = 10^6
>     >fact[0] = 1;
>     >fact[n_] := n fact[n - 1]
>     >Timing[fact[10^6]]
>     >?fact
>     >This generates no output, and the ?fact input line becomes In[1], as
>     >if the kernel died after Timing[fact[10^5]], but no messages are
>     >generated.
>     >
>     >If I bury the recursion limit inside a Block, then I get
>     >fact[0] = 1;
>     >fact[n_] := n fact[n - 1]
>     >Timing[Block[{$RecursionLimit = Infinity}, Return[fact[10^5]]]]
>     >-----> $RecursionLimit::reclim : Recursion depth of 256 exceeded
>     >?fact (* now is In[1] *)
>     >-----? Symbol fact not found.
>     >
>     >
>     >Is this a bug?I couldn't find a list of known bugs on the
>     >mathematica site....
>     >
>     >
>     >Thanks, WCC
>     >
>     >
>     >
>     >W. Craig Carter
>     >Lord Foundation Professor of Materials Science and Engineering
>     >MIT, Dept. of Materials Science and Engineering 13-501877
>     Massachusetts Ave, Cambridge, MA 02139-4307 USA
>     >617-253-6048ccarter at mit.edu <mailto:ccarter at mit.edu>
>     http://pruffle.mit.edu/~ccarter
>     <http://pruffle.mit.edu/%7Eccarter>
>     http://pruffle.mit.edu/~ccarter/FAQS/
>     <http://pruffle.mit.edu/%7Eccarter/FAQS/>
>     http://pruffle.mit.edu/~ccarter/I_do_not_use_microsoft.html
>     <http://pruffle.mit.edu/%7Eccarter/I_do_not_use_microsoft.html>
>     >
>     >
>     >
>     There is an example similar to this in the Mathematic Book in
>     section 2.5.9
>     2.5.9 Functions That Remember Values They Have Found
>     Here is one that I modified a bit with RecursionLimit set to infinity
>
>     In[27]:=
>     Clear[f,x]
>     $RecursionLimit=Infinity
>     f[x_]:= f[x]=x*f[x- 1]
>     f[0]=f[1]=1
>     Timing[f[10^4]]//Short
>
>     Out[28]=
>     $B!g(B
>
>     Out[30]=
>     1
>
>     Out[31]//Short=
>     {0.23 Second,2846259\[LeftSkeleton]35645\[RightSkeleton]00000000}
>
>     Hope this helps
>
>     Pratik
>
>


  • Prev by Date: Re: Re: $RecursionLimit Bug?
  • Next by Date: deleting cells in mathematica
  • Previous by thread: Re: Re: $RecursionLimit Bug?
  • Next by thread: Re: $RecursionLimit Bug?