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)
}
誰かに私の説明をしてもらえますか?上記の再帰関数はどのようにkotlinで機能しますか?コトリン再帰
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)
}
誰かに私の説明をしてもらえますか?上記の再帰関数はどのようにkotlinで機能しますか?コトリン再帰
tailrec
キーワードは、stack overflowのリスクを回避して再帰ではなくループで関数を表現しようとするコンパイラの最適化としてのみ使用されることになります。
我々は再帰を避ける場合は、この関数は次のようなものになります:
fun fact(x: Int): Int {
var result = x
for (i in x - 1 downTo 1) {
result *= i
}
return result
}
Kotlinの 'tailrec'は、関数オーバーフローを防止します。この修飾子は、最適化のためにコンパイラによって使用されます。 –
私は、「関数階級」がコトリンの言葉で「楽しい事実」に変わるのが好きです。 – bipll