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) {
    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学习笔记(五十)尾递归优化_第1张图片
运行结果

你可能感兴趣的:(Kotlin学习笔记(五十)尾递归优化)