Kotlin学习笔记(五十)尾递归优化

/**
 * 尾递归优化
 * 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)
}
运行结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容