How can I calculate results from a function with two inputs using two arrays?

1 次查看(过去 30 天)
I have written a two-argument ackerman function as below. The code works and returns correct values if I specify the values or a variable (with a set value for the command line).
I need to test the function for all combinations of the arrays m=0:1:4 and n=0:1:3 (24 combinations). I can input an array using a for loop for m whilst setting n to 0 and this works fine and returns 6 answers for the cases (0,0) (1,0) (2,0) (3,0) (4,0) (5,0) (6,0). When I add the second array I only get 17 values rather than the 24 combinations.
How can I write this code so that it returns a list of all combinations (24)?
My command line input was below:
n=0:1:3;m=0:1:4;
for a=m
for b=n
res=ack(a,b)
end
end
function res=ack(m,n)
if m==0
res = n+1;
elseif m>0 && n==0
res = ack(m-1,1);
elseif m>0 && n>0
res = ack(m-1,ack(m,n-1));
end

采纳的回答

Mark McBroom
Mark McBroom 2018-2-25
code looks correct. Does your code actually complete? Or is it simply taking a very long time to complete the 18th combination? Your function has very deep recursion and could therefore take a long time to compute whenever n > 0.
  1 个评论
FortuitousMonkey
FortuitousMonkey 2018-2-25
编辑:FortuitousMonkey 2018-2-25
Edit: The correct values I were required to use were m=0:1:3 and n=0:1:4.It now computes all of the values required. This is was computable. When m goes above 4 it appears not computable with my current code.
Thanks for the feedback.
I just checked after I left the computer for a while and a noticed appeared, so your guy sounds right.
Out of memory. The likely cause is an infinite recursion within the program.
Is there a way to compute these larger numbers in Matlab?

请先登录,再进行评论。

更多回答(1 个)

Jan
Jan 2018-2-25
编辑:Jan 2018-2-25
Something goes wrong.
I need to test the function for all combinations of the arrays m=0:1:4 and n=0:1:3
(24 combinations).
m has 5 elements, n has 4 elements, such that you get 20 combinations, not 24.
6 answers for the cases (0,0) (1,0) (2,0) (3,0) (4,0) (5,0) (6,0).
No, there is no 6. m goes from 0 to 4.
When I add the second array I only get 17 values rather than the 24 combinations.
Do you mean inputs or outputs?
As Mark M has said already: The function takes a long time for the input [4,1]. Currently it is still running on my computer...
[EDITED] ... still running - the values grow and grow
[EDITED 2] ... still running. I give up. Do you have an evidence, that the computations ends?
  1 个评论
FortuitousMonkey
FortuitousMonkey 2018-2-25
编辑:FortuitousMonkey 2018-2-25
Yep my mistake on the number of elements, just mixed up to different arrays.
My code failed eventually, I included the error message above.
Edit: Ackerman function always terminates. The recursion is bounded because in each recursive application either m decreases, or m remains the same and n decreases. (Wikipedia)

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by