一篇文章彻底学会递归

# 前言 本篇文章来和大家聊聊递归如何写。我相信这篇文章一定能让大家彻底明白,不再惧怕它。 说到递归,相信大家一定不陌生,其实在生活中也经常会遇到递归的现象。我举个例子: 比如你现在在肯德基排队买汉堡,这个时候你想知道你现在在什么位置上,这个时候你会怎么办呢? 于是你问了你前面的人,但是前面的人也不知道现在的位置,所以他就去问他前面的人,就这样一排一排往前问,直到问到第一排的人,说我在第一排,然后再这样一排一排再把数字传回来。直到你前面的人告诉你他在哪一排,于是你就知道答案了。 这个场景就是典型的递归问题,下面我们来找一下规律,用一个公式来表达这个问题。 可以看出除了第一个人,每个人的位置都是上一个人的位置加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语言版)》 严蔚敏