我有一个算法将继续运行,直到测试通过,此时将返回一个值。我目前正在实现它的方式是无限循环,但我想知道是否有办法在不使用无限循环的情况下完成它(以满足纯粹主义者)。伪代码如下
while (true) {
choose initialNode at random
G = constructComplicatedGraphFromNode(initialNode)
if G satisfies some property
return G
end
}
答案 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
糟糕的风格依赖于随机选择来终止循环。