Filling an array with recursive function
7 views (last 30 days)
Show older comments
mustafa ozendi
on 7 Jan 2019
Commented: mustafa ozendi
on 9 Jan 2019
Dear MATLAB Users,
I am trying to fill in the empty array
using a recursive formula. The formula is shown as follows:
For all 


In this formula, I already know the B array which is
.
So far, I had many attempts but non of them worked. My function is shown below. When I run it, I get the error message "Assignment has more non-singleton rhs dimensions than non-singleton subscripts". Could you please help me to solve this problem?
function I_matrix = fill_I_recursively(B_matrix, u_ind, v_ind, w_ind)
M = size(B_matrix,1);
if u_ind == 1 && v_ind == 1 && w_ind == 1
I_matrix(u_ind,v_ind,w_ind) = 0;
else
if w_ind > 1
I_matrix(u_ind,v_ind,w_ind) = fill_I_recursively(B_matrix, u_ind, v_ind, w_ind-1) + B_matrix(u_ind,v_ind,w_ind-1);
elseif v_ind > 1
I_matrix(u_ind,v_ind,w_ind) = fill_I_recursively(B_matrix, u_ind, v_ind-1, M-1) + B_matrix(u_ind,v_ind-1,M-1);
else
I_matrix(u_ind,v_ind,w_ind) = fill_I_recursively(B_matrix, u_ind-1, M-1, M-1) + B_matrix(u_ind-1,M-1,M-1);
end
end
I am looking forward to hearing from you
3 Comments
Accepted Answer
Stephen23
on 7 Jan 2019
Edited: Stephen23
on 7 Jan 2019
I don't see why you need to use a recursive function:
M = 3;
B = randi(9,M,M,M);
I = zeros(M,M,M);
for ku = 1:M
for kv = 1:M
for kw = 1:M
if kw>1
I(ku,kv,kw) = I(ku,kv,kw-1) + B(ku,kv,kw-1);
elseif kv>1
I(ku,kv,kw) = I(ku,kv-1,M-1) + B(ku,kv-1,M-1);
elseif kw>1
I(ku,kv,kw) = I(ku-1,M-1,M-1) + B(ku-1,M-1,M-1);
end
end
end
end
Note that the formula you gave will give different results depending on the order that you fill the dimensions in.
3 Comments
Stephen23
on 7 Jan 2019
"As far as I know the more for loops in a matlab program means the more execution time"
Not really. This might have been true fifteen years ago, but MATLAB from fifteen years ago is definitely not the same as MATLAB today. Loops are very effiicient and there is absolutely no reason to avoid using them. Just make sure that you preallocate as required!
"That is the reason why I am triyng to implement it as a recursive function"
Recursive functions have a lot more overhead than a few loops, so your approach is likely to be much slower. Test it yourself to find out!
"I realized that this problem can only be solved with a recursive fucntion but I will definitely try your solution"
I am confused: if it can only be solved using a recursive function, why bother trying my loops?
More Answers (0)
See Also
Categories
Find more on Cell Arrays 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!