文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。
递归是非常常用的编程技巧。但是学习过程中往往很容易递出去,却归不回来。
1生活中的例子理解递归
在电影院里面如果你想知道自己在第几排坐着。电影院里面黑,电影票又不在你手里。怎么解决呢?你可以问问前面一个人是第几排,然后加1,就是知道你在第几排。前面那个人可以问他前面的那个人,依次类推,直到第一排那个人,他不用问别人,知道自己是第一排。然后再把这个数一排排传回来,直到你前面的那个人告诉你他在第几排,你的问题就解决了。
不断缩小问题规模,去求解的过程叫做“递”,把答案一步步传回来的过程叫做“归”。
这个问题的递推公式是:
f(n)=f(n−1)+1f(n)=f(n-1)+1f(n)=f(n−1)+1
f(1)=1f(1)=1f(1)=1
有了递推公式就很容易写代码了。
2 可以用递归解决问题的特点
2.1 一个问题可以分解为几个子问题的解
例如菲波那切数列问题f(n)分解为f(n-1)和f(n-2),两个子问题。上面的例子中f(n)分解为f(n-1),一个子问题。
2.2 分解后的子问题与原问题只有数据规模不同,解题思路是一样的
2.3 要有终止条件
3 编写递归代码的步骤
1 找到递推公式
2 找到终止条件