IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Tail Recursion

共 2 篇相关文章

IT 累计浏览 2,664

尾递归与Continuation

这篇文章从一个常见的编程痛点——递归深度受限——出发,引出了两个紧密相关又层次不同的概念:尾递归与 Continuation。作者清晰地解释道,尾递归本质上是一种针对特定代码模式的编译器优化,它能将递归调用在尾部位置时转化为循环,从而避免栈溢出,常用于函数式编程语言中处理深层递归。但其优化范围仅限于尾调用位置,控制流的延续仍然是隐式的。 文章更核心的部分在于探讨 Continuation。通过 CPS(Continuation-Passing Style)转换,作者展示了如何将“程序接下来要做什么”这个隐含的控制流,显式地表示为一个可传递、可存储的“一等对象”。Continuation 能统一表达顺序执行、循环、异常甚至跳转,它将控制权交给了程序员。 两者的根本差异随之浮现:尾递归是对线性控制流的一种实现层优化,而 Continuation 则是对程序控制流本身进行建模的一种强大语言原语。文章用具体的代码示例对比了它们的表达能力,最终让读者理解,Continuation 提供了一种更根本、更灵活的控制流操控视角。这对于理解程序如何“执行”、如何管理流程至关重要。

IT 累计浏览 4,985

快速排序详细分析

这篇讲的是快速排序算法的核心思想与实现细节。文章从算法历史切入,详细拆解了分区(Partition)策略如何通过基准值(pivot)将问题规模递归缩小,并分析了其平均时间复杂度 O(n log n) 的由来。同时,作者将快速排序与归并排序、堆排序等经典算法做了横向对比,指出了快排在实际应用中通常更优的原因,以及它在最坏情况下退化为 O(n²) 的具体场景与优化思路(如随机化 pivot)。最后部分还触及了原地排序与稳定性问题,为读者选择具体算法提供了实用参考。