Создать лямбда-функцию, которая вычисляет факториал рекурсивно - PullRequest
0 голосов
/ 20 июня 2019

Может кто-нибудь создать лямбда-функцию, которая рекурсивно возвращает факториал?

Ответы [ 4 ]

1 голос
/ 20 июня 2019

Лямбда - это тип «Name Less» функции, как в Java у нас есть Anonymous функция.Таким образом, если у вас нет имени, вы не можете назвать себя.

Более того, лямбда обычно используется с Iterable объектами, такими как Array в Kotlin .

Таким образом, мы не можем написать какую-либо рекурсивную лямбда-функцию.

1 голос
/ 20 июня 2019

Лямбды не могут называть себя, так что это не легко выполнимо.Вы можете создать обычную именованную функцию и вызывать ее рекурсивно по имени.

0 голосов
/ 20 июня 2019

Вы можете объявить лямбду как lateinit и ссылаться на нее внутри лямбды при ее объявлении. При таком подходе это не может быть лямбда верхнего уровня, но вы можете использовать его внутри тела другой функции или объявить лямбду в блоке инициализации класса:

lateinit var f: (Int) -> Int
f = {
    if (it <= 1) 1
    else it * f(it - 1)
}
0 голосов
/ 20 июня 2019

Я не уверен, что это хорошая практика, но в Kotlin вы также можете наследовать от lambdas, потому что lambdas в Kotlin являются просто обертками для таких типов, как Function1 и так далее.Следующий код будет вести себя как лямбда:

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))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...