Наилучшим является , доказывающее конечность пред и пост-условиями, вариантами и инвариантами. Если вы можете указать (виртуальную) формулу, значение которой увеличивается при каждом вызове, у вас есть гарантия.
Это то же самое, что и завершающие циклы. Кроме того, это может сделать сложные алгоритмы более доступными.