#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
//求階乘
int fac(int n)
{
if(n==1 || n<=0)
{
n = 1;
return n;
}
if(n>1)
{
return n*fac(n-1);
}
}
// 求累加
int add(int n)
{
if(n==1)
return 1;
if(n>1)
return n+add(n-1);
}
// 求字符串長度
int my_strlen(const char *dest)
{
assert(NULL!=dest);
if('\0'==*dest)
return 0;
else
{
return 1+my_strlen(++dest);
}
}
int main()
{
int n = 5;
int res = fac(5);
int ret = add(5);
printf("5! = %d\n1+2+3+4+5 = %d\n",res, ret);
ret = my_strlen("2323232");
printf("my_strlen = %d\n",ret);
}
遞歸注意事項:
遞歸雖然經典,但是也有他的缺點:
第一、遞歸是反覆地調用自己本身,函數調用的開銷遠大於循環,調用的層次越多效率越低。故建議調用深度不要太深。
第二、遞歸在操作系統中有棧的結構,會消耗一定的空間,調用深度太多可能會導致棧溢出。
第三、遞歸的條件設置一定要正確,避免產生死循環。