Factorial usando el bucle `for` en Kotlin

Con experiencia en progtwigción java, comencé a aprender Kotlin hoy. Estoy jugando con el lenguaje y me encontré atascado para encontrar un factorial usando for loop en kotlin. Logré hacer esto usando while loop.

 import java.util.Scanner fun main(args: Array<String>){ val reader=Scanner(System.`in`) val x: Int = reader.nextInt() println(factorial(x)) } fun factorial(a: Int): Int{ var ans=1 var i: Int = a while(i>1){ ans*=i i-- } return ans } 

Por favor, ayúdame a hacer esto usando un bucle for .

Gracias

    Bueno, el más simple que viene a la mente:

     fun factorial(num: Int): Long { var result = 1L for (i in 2..num) result *= i return result } 

    Esto no usa un bucle for, pero solo como una adición, también puedes hacer esto más corto, más funcional y usar Kotlin como networkinguce :

     fun factorial(num: Int) = (1..num).networkinguce(Int::times) 

    O:

     fun factorial(num: Int) = (1..num).networkinguce { a, b -> a * b } 

    Esto es lo más simple que puedo pensar.

    Editar: Esto es equivalente a

     fun factorial(num: Int) = (2..num).fold(1, Int::times) 

    como networkinguce es prácticamente un fold comenzando desde el valor en el índice 0.

    Empezamos con 2 en su lugar, sin embargo, 1 sería equivalente, ya que multiplicar por uno no cambia el resultado.

    Edición 2: esta edición es exactamente lo que holi-java acaba de publicar.

    hay otro expresivo usando Range # fold y la expresión de reference de function, por ejemplo:

     fun factorial(n: Int) = (2..n).fold(1L, Long::times) 

    Si estoy tan audaz para no hacerlo en un bucle for,

    Aquí hay una útil function recursiva de un trazador de líneas para determinar el factorial:

     fun factorial(a: Int): Long = if (a == 1) a.toLong() else factorial(a - 1) * a 

    Factorial:

     fun factorial(num : Long) : Long { var factorial : Long = 1 for (i in 2..num) { factorial *= i } println("Factorial of $num = $factorial") } 

    Factorial utilizando la variable BigInteger:

     fun factorial(num : Long) : Long { var factorial = BigInteger.ONE for (i in 2..num) { factorial = factorial.multiply(BigInteger.valueOf(num)) } println("Factorial of $num = $factorial") }