From help-octave-request at bevo dot che dot wisc dot edu Fri Jan 25 03:39:31 2002 Subject: Recursion / global variables trouble From: Pieter Thysebaert To: help-octave at bevo dot che dot wisc dot edu Date: Fri, 25 Jan 2002 09:39:37 +0100 Hello, I'm new to this mailing list, but I've already got some questions ;-) The version of octave I'm using is GNU Octave, version 2.0.16 (i386-pc-linux-gnu) on Debian GNU/Linux 2.2 I needed to plot a function which is defined as N-1 nested sums (over the variables x1,...,x(N-1) say). These values do not range over some interval independently of one another, but their sum must equal a certain fixed number, say Q (so there are N variables, but the last one can be calculated from the first N-1 vars) So x1 ranges from 0 to Q, for every x1 value, x2 ranges from 0 to Q-x1, .... However, N is a parameter and I would like to be able to plot this function for different values of N. The approach I came up with is to use a global vector of elements, to be used to store the actual values of the iteration variables in some iteration. Specifically, what I wrote looks like: function res=calc_term_in_function_of_iteration_vars(z) global iterationvars; % calculate useful things and store into res endfunction function r=forloop(z,depth) global iterationvars; %vector that holds the variable values global N; global Q; if (depth==N) r = calc_term_in_function_of_iteration_vars(z); else for iterationvars(depth)=0:Q-sum(iterationvars(1:depth-1)) %for x1, where depth = 1, sum(iterationvars(1:0)) will return 0=OK %DEBUG printf printf("Value of x%d is %d\n\r",depth,iterationvars(depth)); r = r+forloop(z,depth+1); endfor endif endfunction To evaluate the function in a point z, I call forloop(z,1) (after having initialized the needed global variables as global) As you can guess from where I inserted the printf, things don't work like I expected them to do: I have tried it with N=2 and Q=2, and then for each iteration at depth 1 (there are three terms : x1 = 0,1,2=Q) I get Value of x1 = 0 So somehow iterationvars(depth) is not adjusted properly (in the for...line) Can anybody help me with this parameter passing /global variable issue ? Pieter ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------