Cleaner way for coding a repetitive application of a function I have this function definition which takes an r and applies the function f n times:

r =&gt; (1 to n).foldLeft(r)((rx, _) =&gt; f(rx))


So for n=3 this is equivalent to f(f(f(r)))

I don't like this solution, because it defines a Range from 1 to n which really isn't get used at all, which becomes obvious in the unused parameter _ in the fold left. This in turn forces me to give a separate name to rx which feels wrong to me.

Any idea how I can streamLine this code?
What's wrong with straight recursion?

def ntimes[A](n:Int, f:A=&gt;A, a:A):A = if (n==0) a else ntimes(n-1, f, f(a))


Another clean option is

Iterator.iterate(a)(f).drop(n).next