使用 return 语句的无限循环 - 糟糕的风格但不可避免?

Infinite loop with a return statement - bad style but unavoidable?

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

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

另一种方法是使其成为 non-infinite 循环,改变 while 条件。类似于:

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

如果对 G 的检查又长又复杂,您可以将循环基于一个 bool,如果 G 满足所需条件,该 bool 将被重置。

就我个人而言,我会觉得这更简洁一些,但我没有特别反对无限循环内的 return。

忘记了do-while?或者 for (;;) { }。原则上,原始形式不是 bad-style 恕我直言,因为某些 non-linear 行为是可以的。

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

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