数据结构与算法-回文(动态规划、快慢指针) 中我们总结了动态规划的技巧,这篇文章主要是总结递归的技巧,并给出例子。实际上DP和递归思路上基本上都是三步走策略,还是很相似的。
详细原文章来自:https://mp.weixin.qq.com/s/mJ_jZZoak7uhItNgnfmZvQ

递归的三大要素

1.定义函数的功能,明确函数想要干什么

数据结构与算法8-递归

2.找到初始值,即寻找递归结束的条件

数据结构与算法8-递归
数据结构与算法8-递归
数据结构与算法8-递归

3.找到关系式

数据结构与算法8-递归
数据结构与算法8-递归

例题

案例1:斐波那契数列

斐波那契数列的是这样一个数列:1、1、2、3、5、8、13、21、34….,即第一项 f(1) = 1,第二项 f(2) = 1……,第 n 项目为 f(n) = f(n-1) + f(n-2)。求第 n 项的值是多少。

  1. 明确函数想要干什么
    数据结构与算法8-递归
  2. 找到递归结束的条件
    数据结构与算法8-递归
  3. 找到关系式
    数据结构与算法8-递归

案例2:小青蛙跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

数据结构与算法8-递归
数据结构与算法8-递归
数据结构与算法8-递归

案例3:反转单链表

记得之前的 数据结构与算法-链表必写题汇总(快慢指针、哨兵等) 也有这题,但是那题中我们使用一个指针即可解决,但实际上的话也可以使用递归的方法进行解决。这题还和 剑指Offer3-从尾到头打印链表 比较相似,对于从尾到头打印链表问题,我们在这里并不需要反转单链表,所以两题还是有区别的。但是都可以通过递归的方法进行解决。以下是解题思路:

反转单链表。例如链表为:1->2->3->4。反转后为 4->3->2->1

数据结构与算法8-递归
但这里函数反转链表的功能,仅仅是反转当前节点!
数据结构与算法8-递归
具体动图可以进这里看一下:https://leetcode-cn.com/problems/reverse-linked-list/solution/dong-hua-yan-shi-206-fan-zhuan-lian-biao-by-user74/
数据结构与算法8-递归
3.关系式
数据结构与算法8-递归

相关文章: