Re: Simple recursive assignment
- To: mathgroup at smc.vnet.net
- Subject: [mg16028] Re: [mg15996] Simple recursive assignment
- From: "Wolf, Hartmut" <hwolf at debis.com>
- Date: Sat, 20 Feb 1999 02:52:12 -0500
- Organization: debis Systemhaus
- References: <199902190827.DAA18900@smc.vnet.net.>
- Sender: owner-wri-mathgroup at wolfram.com
Ciao Peltio, Peltio schrieb: > > Can someone spare a little time for a trivial question? > > The assignement > a[0]=1.; > a[1]=2.; > a[n_]:=a[n]=a[n-1]-a[n-2]/n > works fine, all right... > a[5] > 0.291667 > equally fine will work that In[4]:=b[0]=1.; b[1]=2.; In[5]:=expr[n_]:= b[n-1]-b[n-2]/n In[6]:=b[n_]:=b[n]=expr[n] In[7]:=b[5] Out[7]=0.291667 but not > expr=b[n-1]-b[n-2]/n; > > b[0]=1; > b[1]=2; > b[n_]:=b[n]=expr > > b[3] > $RecursionLimit::reclim: etc. > Why? From where shall expr get it's value for n? Case 1: n is just a Symbol with no value. Then if you call b[3] then you call expr, and that calls b[n-1] and b[n-2] and n hasn't got a value! which means calling expr, which means calling b[n-1] and b[n-2] with the *same* n! (if n had a value before, say 5, then expr is defined as b[4]-b[3]/5 and b[4] is the same as expr as is also b[3]) ad infinitum! But if you do the following, you will succeed: In[9]:= Remove[b, expr, n] In[10]:= b[0]=1.; b[1]=2.; In[11]:= expr= b[n-1]-b[n-2]/n; In[12]:= b[nn_]:= b[nn]=Block[{n=nn}, expr] In[13]:= b[5] Out[13]= 0.291667 (Just a remark: if you use (n=nn; expr) instead of Block[...] the you will also terminate, but get a wrong result. Can you see why?) ciao, Hartmut H. Wolf, debis Systemhaus, Darmstadt, Germania =======[mailto:hwolf at debis.com]=======
- References:
- Simple recursive assignment
- From: "Peltio" <pelt.ioNOS@PAMiol.it>
- Simple recursive assignment