繁体   English   中英

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

[英]Create lambda function which calculates factorial recursively

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

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

Lambda 是一种无名函数,就像在 Java 中我们有匿名函数一样。 因此,如果你没有名字,你就不能自称。

此外,Lambda 通常与可迭代对象一起使用,例如Kotlin 中的Array。

因此我们不能编写任何递归 Lambda 函数。

我不确定这是一个好的做法,但是在 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))
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM