Matlab递归无法正常工作

时间:2016-01-19 01:31:20

标签: arrays matlab recursion

所以我试图写一些非常基本的代码,基本上根据某些规则创建一个随机数组。我的最终目标是尝试拥有一组数字,其中没有一个数字彼此匹配。但是,似乎我的代码输出的结束数组具有匹配的数字,我似乎无法找出原因。

我已经在下面粘贴了一个示例输出,正如您所看到的,总计'中的一些数字。数组匹配。我在编写递归' 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

2 个答案:

答案 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