Common Lisp にも再帰を書く文化はあると思うんだけど、Common Lisp では仕様上、末尾呼び出しの最適化を保証しているわけではないし、末尾呼び出しの最適化をすると意味の変わるコードがかけてしまう(例えば、スペシャル変数を引数に使うなど)。もちろん Common Lisp の処理系によっては再帰を最適化してくれるものもあるけど、再帰を使うよりも繰り返しを使った方がメリットが多い。
そういうこともあって Google のコーディング規約でも再帰よりも繰り返しを使えって言われてしまう。https://google.github.io/styleguide/lispguide.xml#Recursion