创建lambda函数以递归方式计算阶乘

时间:2019-06-20 09:37:35

标签: java recursion kotlin

有人可以创建递归返回阶乘的lambda函数吗?

4 个答案:

答案 0 :(得分:1)

Lambda不能自称,因此不容易实现。您可以创建常用的命名函数,然后按名称递归调用。

答案 1 :(得分:1)

Lambda是一种“名称较少” 函数,就像Java中的 Anonymous 函数一样。 因此,如果您没有名字,就无法称呼自己。

此外,Lambda通常与 Kotlin 中的Array之类的 Iterable 对象一起使用。

因此,我们无法编写任何递归的Lambda函数。

答案 2 :(得分:0)

我不确定这是一个好习惯,但是在Kotlin中,您也可以从lambda继承,因为Kotlin中的lambda只是诸如Function1等类型的包装器。以下代码将自身表现为lambda:

class FactorialLambda : (Int) -> Int {
    override fun invoke(n: Int): Int =
        if (n == 0 || n == 1)
            1;
        else
            n * this(n - 1);
}

fun main() {
    val factorialLambda = FactorialLambda()
    print(factorialLambda(0))
}

答案 3 :(得分:0)

您可以将lambda声明为lateinit,并在声明时在lambda中引用自身。通过这种方法,它不能是顶级lambda,但您可以在另一个函数的主体内使用它,也可以在类的init块中声明lambda:

lateinit var f: (Int) -> Int
f = {
    if (it <= 1) 1
    else it * f(it - 1)
}