- 递归:
在调用一个函数的过程中,又出现之间或间接调用函数本身的过程就叫做递归。 - 递归函数优点:
在函数的使用中,使代码更加简洁,高效。对待一些算法,有很好的效果。如:汉诺塔问题等。 - 递归函数缺点:
对栈的空间占用过大,容易对栈造成破坏。栈的大小为1M大小,数据过多容易溢出,对程序运行,产生较大破坏。如:斐波那契数列等。
函数举例
int Age(int n)//对年龄函数的一个计算
{
int tmp;
if(n == 1)
tmp = 10;
else
tmp = Age(n-1) + 2;
return tmp;
}
演示函数的使用过程:
图中数据的流向,表明该递归函数对空间即栈的使用。
汉诺塔问题的递归函数
void Move(char x,char y)
{
printf("%c->%c\n",x,y);
g_count++;
}
void Hanoi(int n,char a,char b,char c)//汉诺塔递归函数
{
if(n == 1)
{
Move(a,c);
}
else
{
Hanoi(n-1,a,c,b);
Move(a,c);
Hanoi(n-1,b,a,c);
}
不适合递归函数的问题:
斐波那契数列
int Fibona(int n)//递归的斐波那契数列
{
if(n==1 || n==2)
return 1;
else
return Fibona(n-1) + Fibona(n-2);
}
int Fibona_for(int n)//非递归函数的斐波那契数列
{
int f1 = 1;
int f2 = 1;
int f3 = 1;
for(int i=2;i<n;i++)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}