0

我有一个似乎很简单的问题。我有一个 for 循环,我在每次迭代中调用不同的函数。如果满足特定条件,则仅需要在第一次迭代时使用其中一些函数。解决此问题的一种方法是在调用相关函数之前使用“if”语句检查条件,但我想知道是否有任何其他方法可以解决这个问题,因为我有超过 10 个具有相同情况的函数(不同的当然条件)?例如,请看下面的伪代码:

for Iteration < Generation
    ...
    if ('certain condition 01 holds true')
        output = function01(arguments)
    end
    ...
    ...
    if ('certain condition 02 holds true')
        output = function02(arguments)
    end
    ...    
    ...
    if ('certain condition 10 holds true')
        output = function10(arguments)
    end
    ...
 end

如果我有 10000 次迭代,那么每个“if”语句都应该被评估 10000 次,这会显着增加计算时间。是否可以使用面向对象的编程和类而不是函数来使其更好并且可能更快?

4

2 回答 2

4

如果您总是需要检查某些条件,那么就没有办法避免它。但是,如果您知道前两个条件只能在第一个循环中出现,比如 500 个循环,那么将大循环分成两个 - 第一个包含所有 10 个条件(500 次迭代),第二个只有 8 个(总计 - 500 次迭代)。

要记住的另一件重要事情是elseif在您的条件或continue循环中使用(前提是条件是互斥的 - 我从您的代码示例中推断出这一点)。通过这种方式,您可以确保一旦找到相关条件,其余if语句将不会被执行。此外,您应该在循环开始时检查最可能的情况。即,如果您知道在大多数情况下最有可能出现条件 5,则应首先检查条件 5。if通过这种方式,您可以减少评估语句的次数。

最后,您可以使用该switch语句 - 它比多个elseif's 更具可读性,如果其中一个条件为真,则自动忽略以下条件。

于 2013-01-27T01:16:50.880 回答
2

我不了解类和面向对象,但您可以将函数内部的顺序更改为如下所示:

...
% 'iteration' 1
if (condition1) then
    output = function1(args)
end

if (condition2) then
    output = function2(args)
end
.
.
.
for ix = 2:max
    % code inside loop
end

换句话说,将仅在第一次迭代中调用的代码放在循环开始之前,然后在第二次迭代中开始。

于 2013-01-27T00:20:43.317 回答