0

有没有可以重复一段代码给定次数的函数?

例如:

t= 0; 
while (t< 10) 
  if x==2 
    x=1 
  else 
    x=3; 
  end 
end

我如何使用另一个函数重写这个函数?

4

3 回答 3

4

递归函数可以为您执行此操作(假设您不能使用:for,while,repeat)。

http://www.matrixlab-examples.com/recursion.html

于 2013-01-06T17:46:40.600 回答
2

或者,如果在一次迭代中执行的代码独立于其他迭代的结果,您可以使用arrayfunor cellfun

例如

 fun = @(x) disp(['hello ' , num2str(x)]);
 arrayfun(fun,1:5);

返回

 hello 1
 hello 2
 hello 3
 hello 4
 hello 5

就我个人而言,我确实喜欢这些结构,因为我发现它们就像在 C++ 中一样富有表现力。std::for_each

尽管如此,事实证明它们比被 Matlab JIT淘汰的 naive-loop 对应物要慢(在 SO 上有几个关于这个问题的 Q/A)。

于 2013-01-06T18:32:20.023 回答
1

如果您将代码以矢量格式放置,Matlab 会自动为您“重复”代码:

x_vector = round(2*rand(10,1)) %Your x input
idx = (x_vector==2)
x_vector(idx) = 1;
x_vector(~idx) = 3;
于 2013-01-07T10:11:06.373 回答