Articles of хвостовая рекурсия

Как избежать ошибки StackOverFlow в Java / Kotlin / IntelliJ IDEA?

Я хочу сделать факториал BigInteger (в Котлине). С хвостом рекурсии я получаю ошибку StackOverFlow, когда я пытаюсь сделать 9000! , С нерекурсивной функцией я могу это сделать … но мне очень любопытно, как избежать такой ошибки. Вот мой код: import java.math.BigInteger fun tail_recursion_factorial(n: BigInteger, factorialOfN: BigInteger = BigInteger.valueOf(2)): BigInteger { return when(n){ BigInteger.ONE -> BigInteger.ONE […]

Kotlin – Почему эта функция не подходит для рекурсии хвоста?

Функция send() в следующем примере вызывает себя рекурсивно: internal inner class RouteSender( val features: List<Feature>, val exchange: GrpcUniExchange<Point, RouteSummary> ) { var result: AsyncResult<RouteSummary>? = null // Set in stub for recordRoute. fun send(numPoints: Int) { result?.let { // RPC completed or err'd before sending completed. // Sending further requests won't error, but they will […]

В kotlin функция tailroid tail возвращает 0

Я попытался использовать этот учебник по учебнику youtube . Я имею функцию следующим образом: fun fact(x:Int):Int{ tailrec fun factTail(y:Int, z:Int):Int{ return if(y == 0) { z } else { factTail(y – 1, y * z) } } return factTail(x,1) } и эта функция вызывается в oncreate как: var abc = fact(5) Log.i(TAG, "5! = $abc") […]

Репликация Котлина

fun fact(x: Int): Int{ tailrec fun factTail(y: Int, z: Int): Int{ if (y == 0) return z else return factTail(y – 1, y * z) } return factTail(x, 1) } Может ли кто-нибудь объяснить мне, как эта функция рекурсии работает в котлин?

При использовании Java / Kotlin для программирования рекомендуется использовать рекурсию хвоста или итерационную версию? Есть ли разница в производительности?

Я пытаюсь узнать о хороших практиках в программировании, и я застрял в этом вопросе. Я знаю, что в Java рекурсивные функции могут быть «болью в заднице» (иногда), и я стараюсь реализовать столько, сколько я могу использовать для хвостовой версии этой функции. Стоит ли беспокоиться об этом или делать это по-старому? Есть ли разница между этими […]

Котлин: Рекурсия хвоста для взаимно-рекурсивных функций

Предположим, что я пишу код следующим образом: tailrec fun odd(n: Int): Boolean = if (n == 0) false else even(n – 1) tailrec fun even(n: Int): Boolean = if (n == 0) true else odd(n – 1) fun main(args:Array<String>) { // 🙁 java.lang.StackOverflowError System.out.println(even(99999)) } Как заставить Kotlin оптимизировать эти взаимно рекурсивные функции, чтобы я […]