# Calling a function in function considering a loop

1 view (last 30 days)
Mohsen on 5 Sep 2022
Edited: Rik on 5 Sep 2022
Hi
I have a function like c=F(i,j)
I want to create a loop in my function as below
for p=1:4
c=c+x*F(i-p,j)
end
I want to have this
c=F(3,1) + F(2,1) +F(1,1)
By doing that, unfortunetaly, the MATLAB does not condider all the loops and when i=i-p, it immidiately goes out from the function and just consider F(3,1)
I appreciate that if u tell me how i can do sth like this.
##### 2 CommentsShowHide 1 older comment
Mohsen on 5 Sep 2022
Edited: Rik on 5 Sep 2022
function CB=F(i,j)
global Z
N=3;
CB=0;
TC=[7,4,5,6,5,8];
LL=[2,3,1,1,1,1];
persistent G
if isempty(G)
G=ones(N,1);
end
if i==1
for p=1:(N-1)
G(i,1)=0;
if G(p+i,1)==0
CB=CB+TC(1)/(N-1);
else
CB=LL(p)*G(1+p,1)*A(1+p,j)+TC(1)/(N-1);
end
end
elseif i==N
for p=1:(N-1)
G(i,1)=0;
CB=CB+LL(p)*G(i-p,1)*B(i-p,j)+TC(i)/(N-1);
end
else
for p=1:(i-1)
G(i,1)=0;
if (G(i-p,1)==0)
continue;
else
CB=CB+LL(p)*G(i-p,1)*B(i-p,j)+TC(i)/(i-1);
end
end
for p=1:(N-i)
if (G(i+p,1)==0)
continue;
else
CB=LL(p)*G(i+p,1)*A(i+p,j);
end
end
end
end
function a=A(i,j)
global Z
global G
Z=i;
G(i,1)=0;
a=F(i,j);
end

Mathieu NOE on 5 Sep 2022
hello
here you are.
NB I prefered not to use the same "c" variable name both in the function and in the main loop - not that it's forbidden or a coding mistake, simply this is prone to errors and does not ease the code reading / debugging.
% init
c = 0; % init c = zero
i = 4;
j = 1;
x = 1;
% main code
for p = 1:3
c = c+x*F(i-p,j);
end
% function
function out = F(i,j)
out = 5*i + 10*j;
end
Mohsen on 5 Sep 2022
Well z and y are 2 constants.
As you mentioned, I surely need recursion.
The F(i,j) is a function of F(i-p,j) where p=1:i.
So
F(i,j)=constant*F(i-1,j) + constant*F(i-2,j)+ ... + constnat*F(1,j) eq(1)
And again
F(i-1,j)= onstant*F(i-2,j) + constant*F(i-3,j)+ ... + constnat*F(1,j).
Until
F(2,j)= constant*F(1,j)
The problem is that in the eq(1) the for loop does not run completely and when the compiler reachs F(i-1,J). It goes out from the loop.
At the first step, I want the loop runs completely and then all functions (F(i-1,j) ...) recall.

### Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!