DeepRecursiveFunction
所在位置是kotlin.DeepRecursiveFunction
,其相关用法介绍如下。
用法:
class DeepRecursiveFunction<T, R>
定义将堆栈保留在堆上的深度递归函数,这允许不使用实际调用堆栈的非常深度的递归计算。要启动对此深度递归函数的调用,请使用其invoke 函数。根据经验,如果递归超过一千次调用,则应该使用它。
DeepRecursiveFunction 采用 T 类型的一个参数并返回 R 类型的结果。 block 代码定义了递归函数的主体。在此块中,callRecursive 函数可用于对声明的函数进行递归调用。 DeepRecursiveFunction 的其他实例也可以使用callRecursive
扩展名在此范围内调用。
例如,看看下面的递归树类和这个树的深度递归实例,它有 100K 个节点:
class Tree(val left: Tree? = null, val right: Tree? = null)
val deepTree = generateSequence(Tree()) { Tree(it) }.take(100_000).last()
可以定义一个常规递归函数来计算树的深度:
fun depth(t: Tree?): Int =
if (t == null) 0 else max(depth(t.left), depth(t.right)) + 1
println(depth(deepTree)) // StackOverflowError
如果为 deepTree
调用此 depth
函数,由于深度递归,它会生成 StackOverflowError
。但是,depth
函数可以通过以下方式使用DeepRecursiveFunction
重写,然后成功计算
表达式:depth(deepTree)
val depth = DeepRecursiveFunction<Tree?, Int> { t ->
if (t == null) 0 else max(callRecursive(t.left), callRecursive(t.right)) + 1
}
println(depth(deepTree)) // Ok
深度递归函数也可以通过callRecursive扩展使用堆栈的堆相互调用。例如,以下一对相互递归函数计算树中偶数深度处的树节点数。
val mutualRecursion = object {
val even: DeepRecursiveFunction<Tree?, Int> = DeepRecursiveFunction { t ->
if (t == null) 0 else odd.callRecursive(t.left) + odd.callRecursive(t.right) + 1
}
val odd: DeepRecursiveFunction<Tree?, Int> = DeepRecursiveFunction { t ->
if (t == null) 0 else even.callRecursive(t.left) + even.callRecursive(t.right)
}
}
参数
相关用法
- Kotlin DeepRecursiveFunction.<init>用法及代码示例
- Kotlin Delegates.notNull用法及代码示例
- Kotlin Delegates.vetoable用法及代码示例
- Kotlin Delegates.observable用法及代码示例
- Kotlin Double.dec用法及代码示例
- Kotlin Duration.toString用法及代码示例
- Kotlin Duration.parseIsoStringOrNull用法及代码示例
- Kotlin Duration.parseOrNull用法及代码示例
- Kotlin Duration.toIsoString用法及代码示例
- Kotlin Duration.parseIsoString用法及代码示例
- Kotlin Duration.parse用法及代码示例
- Kotlin Double.inc用法及代码示例
- Kotlin DoubleStream.toList用法及代码示例
- Kotlin DoubleStream.asSequence用法及代码示例
- Kotlin associateBy用法及代码示例
- Kotlin all用法及代码示例
- Kotlin map用法及代码示例
- Kotlin filterNot用法及代码示例
- Kotlin reduceRight用法及代码示例
- Kotlin Random.Default用法及代码示例
- Kotlin Byte.inc用法及代码示例
- Kotlin getValue用法及代码示例
- Kotlin windowedSequence用法及代码示例
- Kotlin contentToString用法及代码示例
- Kotlin groupByTo用法及代码示例
注:本文由纯净天空筛选整理自kotlinlang.org大神的英文原创作品 kotlin.DeepRecursiveFunction。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。