Goto は必要か? 「再帰をループに展開」篇

Twitter でのちょっとしたやりとりが元で、ちょっと Ruby で再帰フィボナッチと、それをそのままループに展開したものを書いてみたわけですが( https://gist.github.com/metanest/6145168 )、スタックに入れて、すぐ出して、を繰り返しているので、それをもうちょっと最適化してみました。
すると、goto が必要そうな感じだったので、goto を使う形に展開してみたわけですが(ここではGo言語での例を示します)、

もうちょっと考えてみたところ、この場合はラベル付き break があれば goto なしでも書けました。

Go言語ではどちらの書き方もできるので、ここではGo言語の例を示しましたが、goto を使うほうは C# などでも、ラベル付き break のほうは Java などでも同様に書けます。