所谓递归,说的简单点,就是函数自己调用自己,然后在某个特定条件下。结束这种自我调用。
如果不给予这个结束条件,就成了无限死循环了。这样这个递归也就毫无意义了。
如下面问题
1 1 2 3 5 8 13 21 ........n
分析可以看出, i 表示第几个数, n 表示该数的值
当i = 1 时, n = 1;
当i = 2 时, n = 1;
当i = 3 时 n = i1 + i2;
当i = 4 时 n = i2 + i3
所以可以写个函数
int fun(int n) // 这里的n代表第几个数
{
if(1 == n || 2 == n) // 第一个数
{
return 1;
}
else
{
return fun(n - 1) + fun(n - 2); // 这里就是自己调用自己,形成循环自我调用。
}
}
注: 以上代码只是用来演示递归,不包含错误校验。
在实际生产过程中。该代码不够健壮。
如此,就完成了递归。你就可以求得第n个数了。
何时考虑使用递归。
当你分析一个问题的时候,发现这个问题,是一个自我循环时,而且这个自我循环到一个给定值,就可以终止的时候,你就快要考虑递归了。
(PS:因为很多IT术语的定义都来源于国外,我们看的中文大部分是别人看了国外的文献然后以他的中文素养加以解释的!但是中华语言博大精深!而英语就较为简单了,记得上次看高德纳的《surreal number》时候,文中有一句“the beginning of the world”,而作者译为“万物初始”,从这里就可见一斑了!所以,对于一些不是很明白的IT术语,可以去看一下英文翻译,可能会对你有帮助)递归的英文是recursion,有循环的意思。
能够形成函数递归,该函数要有两个属性:
1.A simple base case (or cases), and
2.A set of rules which reduce all other cases toward the base case.
For example, the following is a recursive definition of a person's ancestors:
One's parents are one's ancestors (base case).
The parents of one's ancestors are also one's ancestors (recursion step).
The Fibonacci sequence is a classic example of recursion:
Fib(0) is 0 [base case]
Fib(1) is 1 [base case]
For all integers n > 1: Fib(n) is (Fib(n-1) + Fib(n-2)) [recursive definition]
楼上的同志将递归的定义解释得已经很清楚了,但是你想要真正了解什么是函数递归,最好先了解什么是递归!然后对于函数递归就豁然开朗了!
递归就是在过程或函数里调用自身。在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
int rev(int i)
{
if(i<5) rev(i++);
else return i;
}
int rev(int i)
{
if(i<5) rev(i++);
else return i;
}