Algorithms_算法思想_递归篇

文章目录


Algorithms_算法思想_递归篇


引导案例

案例一:

分销系统的返利: 比如B是A的下线,C是B的下线,那么在分钱返利的时候A可以分B,C的钱,这时候我们是不是就要分别找B,C的最后上级。这个问题我们一般怎么来解决呢?

C–>B–>A


案例二: .斐波那契数列:

1 1 2 3 5 8 13 21 ......

有什么特点?
从第三个数开始 就等于前面两个数相加;

数论思想:利用数学公式或者定理或者规律求解问题;

算法思想中最难的点:递归+动态规划

树论中(比如二叉树,红黑树)和递归密不可分,所以递归一定要弄明白了。


递归的定义

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

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

举个生活中的例子

比如我们在某窗口排队人太多了,我不知道我排在第几个,那么我就问我前面的人排第几个, 因为知道他排第几我就知道我是第几了。但前面的人也不知道自己排第几那怎么办呢?他也可以继续往前面问,直到问到第一个人,然后从第一个人一直传到我这里 我就很清楚的知道我是第几了

以上这个场景就是一个典型的递归。我们在这个过程中大家有没有发现一个规律那么就是会 有一个问的过程,问到第一个后有一个回来的过程吧。这就是递(问)加归(回)

那么这个过程我们是不是可以用一个数学公式来求解呢?那这个数学公式又是什么?
f(n)=f(n-1)+1
f(n):表示我的位置
f(n-1):表示我前面的那个人;
自己调用自己;

推导出公式: f(n) = f(n-1) + f(n-2)


什么样的问题可以用递归算法来解决

需要满足的条件才可以用递归来解决?

1. 一个问题可以分解为几个子问题

2. 这个问题与分解之后的子问题的求解思路完全一致

3. 一定有一个确定的答案:即递归的终止条件


Algorithms_算法思想_递归篇Algorithms_算法思想_递归篇 小小工匠 博客专家 发布了780 篇原创文章 · 获赞 1968 · 访问量 411万+ 他的留言板 关注
上一篇:如何自学计算机?自学历程


下一篇:[Algorithms] 打印菱形的另一种方法