再帰定理というのがあって、再帰とループは機能的に違いがないことが証明されているそうです。
つまり、原理的には再帰で書けるコードはループで書けるんだそうです。
Scheme(LISP系の関数型プログラミング言語)だと、繰り返しはループじゃなくて再帰を使うんだそうです。