意識して末尾再帰にするくらいならはじめから再帰なんて使わんよ。
C++のコンパイラには最適化をやってくれるのもが多いがJavaやC#はやらんみたいだ。