算法三——递归

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。
  递归是非常常用的编程技巧。但是学习过程中往往很容易递出去,却归不回来。

1生活中的例子理解递归

在电影院里面如果你想知道自己在第几排坐着。电影院里面黑,电影票又不在你手里。怎么解决呢?你可以问问前面一个人是第几排,然后加1,就是知道你在第几排。前面那个人可以问他前面的那个人,依次类推,直到第一排那个人,他不用问别人,知道自己是第一排。然后再把这个数一排排传回来,直到你前面的那个人告诉你他在第几排,你的问题就解决了。
 不断缩小问题规模,去求解的过程叫做“递”,把答案一步步传回来的过程叫做“归”。
 这个问题的递推公式是:
  f ( n ) = f ( n − 1 ) + 1 f(n)=f(n-1)+1 f(n)=f(n1)+1
  f ( 1 ) = 1 f(1)=1 f(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 找到终止条件

你可能感兴趣的:(极客-算法)