一、递归函数定义
- 在高级语言的学习中,函数调用自己和调用其他函数并没有本质的区别,函数直接或者间接调用自己(函数本身)就称该函数为递归函数;
二、递归函数的特点
- 递归函数必须含有结束条件否则会陷入死循环;
- 递归比迭代会消耗大量的时间和内存,函数反复调用返回,申请临时内存空间;
- 调用和函数返回,递归的返回顺序是它调用的顺序的逆序;
三、递归实例
1、利用递归算法求n的阶乘
int factorial( n )
{
if( 0 == n )
return 1;
else
return n * factorial( n - 1 );
}
2、分别利用迭代方法和递归的方法求斐波那契数列
对比了两种实现斐波那契的代码,迭代和递归的区别是:迭代使用的是循环结构,递归使用的是选择结构。使用递归能使程序的结构更清晰、更简洁、更容易让人理解,从而减少读懂代码的时间。
迭代
int main()
{
int i;
int arr[40];
arr[0]=0;
arr[1]=1;
printf("%d\n",arr[0] );
printf("%d\n",arr[1] );
for(i=2;i<40;i++)
{
arr[i]=arr[i-1]+arr[i-2];
printf("%d\n",arr[i] );
}
return 0;
}
递归
int fib(int i)
{
if(i<2)
return i == 0 ? 0 : 1
return Fib(i-1) + Fib(i-2);
}
3、利用递归方法实现字符逆序打印
编写一个递归函数,实现将输入的任意长度的字符串反向输出的功能。
例如输入字符串abcd则输出字符串dcba。
void print()
{
char a;
scanf(“%c”, &a);
if( a !=‘#’)
print();
if( a !=‘#’)
printf(“%c”, a);
}
四、总结
关于递归切记要含有结束条件,还有就是递归函数调用和函数返回,递归的返回顺序是它调用的顺序的逆序;