有人可以创建递归返回阶乘的lambda函数吗?
答案 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)
}