我也是最近才搞懂它。有点难理解,我不太常用,觉得有点麻烦(并不是说递归不好,只是看情况)。但是既然考试要考,还是学一下吧。
递归一般由函数来实现,偶尔也用主函数。它其实不像他们说的“递去归来”那么复杂,简单来说就是自己调用自己。从上往下,就像一个公式,每次传不同的数进去,还有未知数就再传,直到一为止。
没接触过的人可能会看不懂上面这段,我再给个解释。
比如说像从一加到十,会的人一个循环就可以解决。但用递归的话就要复杂一些:
用这个 结果=结果+传过来的值。
把传过来的值-1传到这个函数里来。
就是依次累加的意思。一开始,‘结果’要制零(因为你根本不知道它会给你初始成一个什么数),传过来的是10(按咱们假设的题来算),就会得到‘结果’是十。而又把十减一传回去,就会运行十加九,以此类推。
知道了之后,再来看一个复杂一点的递归例子。
听说过斐波那契数列吧?!这道题是要输出第n个斐波那契数。为了方便,直接上代码。
int fibo(int n)
{
if(n<=2) return 1;
return fibo(n - 2) + fibo(n - 1);
}
斐波那契数列长这个样子:1 1 2 3 5 8 13 21......
你大概看出来了,就是第三个数是前两个数之和。这道题用递归就很简便。这是个函数,名字叫‘fibo'。(不会函数的赶紧去问老师!!!)
来看看函数里面的内容。如果n小于等于二,就返回1,因为前两个数就是一。
第二句有点费脑筋。就是我刚说的,自己调用自己。相比于上面那到累加题,这是一个更为复杂的语句。我们暂且把n设为4。
加号的右边
在这里调用了自己。
先传回了4,有了两个结果:n-2和n-1(2,3.)
(为了方便,我们只看加号右边)
在右边,3又被分为两个,一个n-2,一个n-1。(1,2.)
这下好了,两个数都在二的范围内,值都是一。
最后,倒着推一下。
左边是一,右边也是一,加一块是2。但是我们知道,第四个数是3。
为什么呢?
哈哈,脑子断片了吧!!
我们加号的左边没算。结果应该是1。加一起是3,没错。
加号左边同样如此,但要简单一些。为了省劲,脑补一下就好了。