带有返回语句的无限循环 - 糟糕的风格但不可避免?

时间:2018-03-12 13:57:49

标签: language-agnostic return infinite-loop

我有一个算法将继续运行,直到测试通过,此时将返回一个值。我目前正在实现它的方式是无限循环,但我想知道是否有办法在不使用无限循环的情况下完成它(以满足纯粹主义者)。伪代码如下

while (true) {
    choose initialNode at random
    G = constructComplicatedGraphFromNode(initialNode)
    if G satisfies some property
        return G
    end
}

2 个答案:

答案 0 :(得分:1)

另一种方法是使其成为非无限循环,改变while条件。类似的东西:

var G = default graph
while (G does satisfy property) {
    choose initialNode at random
    G = constructComplicatedGraphFromNode(initialNode)
}

如果对G的检查是漫长而复杂的,那么你可以将循环基于一个bool,如果G满足所需条件,它将被重置。

就个人而言,我会觉得这个更清洁,但我没有特别反对无限循环内的回归。

答案 1 :(得分:1)

被遗忘的做什么?或for (;;) { }。原则上,原始形式不是坏风格的恕我直言,因为一些非线性行为是可以的。

do {
    choose initialNode at random
    G = constructComplicatedGraphFromNode(initialNode)
} while (! G satisfies some property);
return G

糟糕的风格依赖于随机选择来终止循环。