递归详解

递归的定义

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

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

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

数学代入法理解递归

假设我们用递归来算阶乘 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 @ 2021-12-02 14:45  民宿  阅读(288)  评论(0编辑  收藏  举报