递归详解

递归的定义

定义:递归算法是一种直接或者间接调用自身函数或者方法的算法。

通俗来说,递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。它有如下特点:

  • 一个问题的解可以分解为几个子问题的解
  • 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
  • 存在递归终止条件,即必须有一个明确的递归结束条件,称之为递归出口

数学代入法理解递归

假设我们用递归来算阶乘 f(n)

f = n =>
    n === 1 ? 1
            : n * f(n-1) 

f 里面用到了 f,怎么理解呢?

很简单,把式子展开即可:

 看到递归了吗?

先递进,在回归--这就是递归。

以上是SICP原文(有删改)

归并排序递归详解

复制代码

f({8, 6, 8, 4, 2, 3})
=> f(fl({8, 6, 8}) fr({4, 2, 3}))
=> f(fl(fl({8, 6})fr({8})) fr({4, 2, 3}))
=> f(fl(fl(fl({8})fr({6}))fr({8})) fr({4, 2, 3}))
=> f(fl(fl({6, 8})fr({8})) fr({4, 2, 3}))
=> f(fl({6, 8, 8}) fr(fl({4, 2})fr({3})))
=> f(fl({6, 8, 8}) fr(fl(fl({4})fr({2}))fr(3)))
=> f(fl({6, 8, 8}) fr(fl({2, 4})fr({3})))
=> f(fl({6, 8, 8}) fr({2, 3, 4}))
=> f({2, 3, 4, 6, 8, 8})

复制代码

 

 先递归左,在递归右,当递归到最后一个元素之后,看是交换位置。

posted @   民宿  阅读(289)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示