/**
* 尾递归优化
* 1.调用自身后无其他操作的递归叫尾递归
* 2.使用tailrec关键字提示编译器尾递归优化,可大幅度加快运行效率,只适用于尾递归的情况
*/
data class ListNode(val value: Int, var next: ListNode? = null) //链表结点
tailrec fun findListNode(head: ListNode?, value: Int): ListNode? { //根据传入的值查找节点
head ?: return null //如果头结点为空,返回null
if (head.value == value) return head //如果头结点的值等于传入的值,返回头结点
//如果未查到,将头结点的下一个结点和要查找的值传入函数本身,继续查找
return findListNode(head.next, value)
}
fun main(args: Array<String>) {
val MAX_NODE_COUNT = 100000
val head = ListNode(0)
var p = head
for (i in 1..MAX_NODE_COUNT) {
p.next = ListNode(i)
p = p.next!!
}
println(findListNode(head, MAX_NODE_COUNT - 2)?.value)
}
Kotlin学习笔记(五十)尾递归优化
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...