一篇文章彻底学会递归
# 前言
本篇文章来和大家聊聊递归如何写。我相信这篇文章一定能让大家彻底明白,不再惧怕它。
说到递归,相信大家一定不陌生,其实在生活中也经常会遇到递归的现象。我举个例子:
比如你现在在肯德基排队买汉堡,这个时候你想知道你现在在什么位置上,这个时候你会怎么办呢?
于是你问了你前面的人,但是前面的人也不知道现在的位置,所以他就去问他前面的人,就这样一排一排往前问,直到问到第一排的人,说我在第一排,然后再这样一排一排再把数字传回来。直到你前面的人告诉你他在哪一排,于是你就知道答案了。
这个场景就是典型的递归问题,下面我们来找一下规律,用一个公式来表达这个问题。
可以看出除了第一个人,每个人的位置都是上一个人的位置加1,所以我们的公式可以写成:
```
f(n) = f(n-1)+1,其中f(1)=1。
```
f(n) 表示你想知道自己在哪一排,f(n-1) 表示前面一排所在的排数,f(1)=1 表示第一排的人知道自己在第一排。
有了这个递推公式,那么我们可以写出递归代码了。
```
int f(int n) {
if (n == 1) return 1;
return f(n-1) + 1;}
```
# 参考文档
[1.《尾调用优化》阮一鸣](http://www.ruanyifeng.com/blog/2015/04/tail-call.html)
[2.《数据结构与算法之美》王争]()
3. 《数据结构(C语言版)》 严蔚敏