递归函数是指一个函数的函数体中直接或间接调用了该函数自身
递归函数调用的执行过程分为两个阶段:
递推阶段:从原问题出发,按递归公式递推从未知到已知,最终到达递归终止条件
回归阶段:按递归终止条件求出结果,逆向逐步供稿递归公式,回归到原问题求解
递归函数例题:生兔子
int i=1,n,s=0; printf("第个月的兔子数量为:"); scanf("%d",&n); while(i<=n){ s=fib(i); printf("第%d个月有%d只\n",i,s); i++; } printf("一共有%d只兔子",s); return 0; } int fib(int n){ if(n==1 || n==2){ return 1; } if(n>2){ return fib(n-1)+fib(n-2); } }
函数指针:函数指针用来存放函数的地址,这个地址是一个函数的入口地址
函数名代表了函数的入口地址
函数指针变量的一般形式为:<数据类型>(*<函数指针名称>)(<参数说明列表>);
<数据类型 >是函数指针所指向的函数的返回值类型
<参数说明>应该与函数指针所指向的函数的形参说明保持一致(可以省略形参,写上数据类型就可)
(*<函数指针名称>)中,*说明为指针()不可缺省,表明为函数的指针
例子:
int m=20,n=40; int (*p)(int,int); p=add; printf("%d\n",add(m,n)); printf("%d\n",(*p)(m,n)); return 0; } int add(int a,int b ){ return a+b; }
函数指针数组:一个若干个函数名的数组