# Higher-order function and recursive call

#1

Hi , I want to implement a function, that returns a function with recursive call on itself. An Example: recursive calculation of compound interest

``````fun interest(end: Double, inc: Double) = {(start: Double, i: Int) ->
if(start >= end) i
else // here i want to call the function
}``````

a simple function that works now is

``````fun interest(start: Double, end: Double, inc: Double, i: Int = 0): Int {
if(start >= e) return i
else return interest(start + start * inc / 100,end, inc, i + 1)
}``````

so the best looking code would be

``````fun interest(end: Double, inc: Double) = {(start: Double, i: Int = 0) ->
if(start >= end) i
else (start + start * inc / 100, i + 1)
}
val f = interest(2000, 1)

f(1000)
f(500)
… ``````

Here are two things, that are not working right now:

1. default value
2. recursive call

#2

Kotlin can't do what you want exactly, but I think you can get close with a named local function

#3

Thx for the hint with the local function.

This is a solution i’m happy with:

``

``````fun interest(end: Double, inc: Double) : (Double) -> Int{
fun interest(start: Double, i: Int): Int {
if(start >= end) i
else interest(start + start * inc / 100, i + 1)
}
return {(start: Double): Int -> interest(start, 0)}
}
val f = interest(2000.0, 1.0)
println(f(1000.0))
println(f(500.0))``````

#4

You can make it a bit shorter by removing the type annotations on the return line:

``

``````    return {start -> interest(start, 0)}
``````