help-octave
[Top][All Lists]

## Recursion / global variables trouble

 From: Pieter Thysebaert Subject: Recursion / global variables trouble 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
-------------------------------------------------------------

```