私が持っているテストの練習問題に取り組んでおり、ループバリアントのすべての例は、ループの反復ごとに減少しました。これについては、a <bの場合、値は同じままです。私の試みはまた、時々aがbより大きくなり、その逆になるため、負の可能性があるループバリアントを取得しました。この質問のループバリアントを見つけて証明するためのアドバイスはありますか?
def mystery(a,b):
# Precondition: a >= 0 and b >= 0
while a >= 0 and b >= 0:
if a < b:
a, b = b, a
else:
a = a - 1
return a
編集:この質問に興味がある人にとって、私の最善の解決策は次のとおりです。
1
非常に素晴らしい!あなたはそれを答えにすべきだと思います(あるいは答えさえも)。
—
アントントルノフ2015年