所以我试图写一些非常基本的代码,基本上根据某些规则创建一个随机数组。我的最终目标是尝试拥有一组数字,其中没有一个数字彼此匹配。但是,似乎我的代码输出的结束数组具有匹配的数字,我似乎无法找出原因。
我已经在下面粘贴了一个示例输出,正如您所看到的,总计'中的一些数字。数组匹配。我在编写递归' addboard'的方式时,我猜错了。功能,但我不知道什么是错的。如果有人能提供一些建议,那就太棒了。感谢。
function [Components,Totals] = BoardForm1()
BoardLengths = [4,6,8,10,12];
Initial = [0,1,2,3,4,5,6,7];
Components = zeros(8,14);
Totals = zeros(8,14);
for i=1:14
for row = 1:length(Initial)
[currentboard,test] = addboard(row,BoardLengths,Initial,Totals);
Initial(row) = test;
Components(row,i) = currentboard
Totals(row,i) = test
end
end
end
function [currentboard,test] = addboard(x,BoardLengths,Initial,Totals)
currentboard = BoardLengths(randi(length(BoardLengths)));
test = Initial(x) + currentboard;
if ismember(test,Totals)
addboard(x,BoardLengths,Initial,Totals);
end
end
Totals =
12 16 28 34 44 56 68 76 84 94 106 114 118 128
13 25 35 39 43 49 53 61 65 75 83 91 95 103
6 18 22 34 42 50 54 66 72 82 86 92 104 112
15 23 35 41 51 57 63 69 73 81 87 99 105 111
14 26 36 48 58 68 80 90 100 104 108 114 120 130
9 13 23 27 31 37 43 49 55 61 65 75 87 91
12 24 34 42 46 54 60 64 72 76 82 88 92 96
19 29 33 39 47 57 69 77 83 89 101 109 119 125
答案 0 :(得分:2)
MATLAB按值传递,因此忽略递归的添加板中所做的任何更改,因为忽略其输出值。通过设置[currentboard,test] = addboard
的输出值进行修复一般来说,我建议迭代地(循环)而不是递归地执行此操作。甚至可能有一个单行程可以做到这一点,但我不清楚评论中董事会的要求是什么。
答案 1 :(得分:1)
我无法理解你的代码,也许一些注释函数应该做些什么会有所帮助,但只是在正式级别阅读代码时,这些代码中至少有一个错误:
if ismember(test,Totals)
addboard(x,BoardLengths,Initial,Totals);
end
您正在调用addboard
而没有输出参数,这些参数无效。应该是:
if ismember(test,Totals)
[currentboard,test] = addboard(x,BoardLengths,Initial,Totals);
end