在Kotlin中使用`for`循环的因子

Anm*_*tam 3 loops factorial kotlin

凭借java编程经验,我今天开始学习Kotlin.我正在玩这种语言,发现我坚持for在kotlin中找到一个使用循环的阶乘.我设法使用while循环来做到这一点.

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
}
Run Code Online (Sandbox Code Playgroud)

请帮我用for循环来做这件事.

谢谢

Ale*_*nov 11

嗯,最简单的一个想到的:

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


Moi*_*ira 6

这不使用 for 循环,但作为补充,您还可以使用以下命令使其更短、更实用且类似于 Kotlin reduce

fun factorial(num: Int) = (1..num).reduce(Int::times)
Run Code Online (Sandbox Code Playgroud)

或者:

fun factorial(num: Int) = (1..num).reduce { a, b -> a * b }
Run Code Online (Sandbox Code Playgroud)

这是我能想到的最简单的。

编辑:这相当于

fun factorial(num: Int) = (2..num).fold(1, Int::times)
Run Code Online (Sandbox Code Playgroud)

作为reduce实际上是一个fold在索引0处从值开始。

我们从 2 开始,但是 1 将等同于乘以 1 不会改变结果。

编辑2:此编辑正是holi-java 刚刚发布的内容。