使用 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
糟糕的风格是依靠随机选择来终止循环。
我有一个算法将保持 运行 直到测试通过,此时将返回一个值。我目前实现它的方式是使用无限循环,但我想知道是否有一种方法可以不使用无限循环(以满足纯粹主义者)。伪代码如下
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
糟糕的风格是依靠随机选择来终止循环。