一.定义
递归函数即自调用函数,在内部直接或者间接调用自身的函数,即函数的嵌套是函数本身。
二.分类
A.直接递归:函数中出现调用函数本身:

#include<iostream>
using namespace std;
long fib(int x)
{
    if(x>2)
    return (fib(x-1)+fib(x-2));
    else
    return 1;
}
int main()
{
    int x;
    cin>>x;
    long y=fib(x);//定义一个新的变量来接收return返回的值,并将其结果输出。
    cout<<y<<endl;
    return 0;
}

B.间接递归:在a函数中调用了b函数,而在b函数中又调用了a函数:

int fn1(int a)
{
int b;
b=fn2(a+1);
}
int fn2(int s)
{
int c;
c=fn1(s-1);
}

注意fn2函数的声明必须在fn1之前!!!
三.递归的条件:

#include<iostream>
using namespace std;
void count(int x)//递归函数可以无返回值
{
    if(x>1)//B
        count(x-1);//C
    else
        cout<<x<<endl;//A该句完成函数任务,即输出x<1时的值,与之前有返回值的递归函数不同
}

1.须有完成函数任务的语句。
如上注释A。
2.一个确定能否避免递归调用的测试,且必须先测试再递归,否则会导致无限递归,使栈空间溢出。
如上注释B。
3.一个递归调用语句,且递归调用语句的参数应该逐渐逼近不满足条件,最后断绝递归。
如上注释C。