递归就是调用自身
eg1:打印函数
//递归
void printArr1(int *arr,int len)
{
if(arr==NULL || len<1)
return;
printArr1(arr,len-1);
printf("%d ",arr[len-1]);
}
//非递归
void printArr(int* arr,int len)
{
if(arr==NULL || len<1)
return;
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
eg2:斐波那契数列
//模拟循环
int fac(int n,int a,int b)
{
if(n<3) return a;
else return fac(n-1,a+b,a);
}
int fun2(int n)
{
int a=1,b=1;
return fac(n,a,b);
}
//递归调用次数太多
int fun1(int n)
{
if(n<3)
return 1;
else
return fun1(n-1)+fun1(n-2);
}
int fun(int n)
{
int a=1,b=1,c=1;
for(int i=3;i<=n;i++)
{
c=a+b;
b=a;
a=c;
}
return c;
}
eg3:求字符串的长度
int my_strlen(char* str)
{
if(str==NULL || *str=='\0')
return 0;
else
return my_strlen(str+1)+1;
}