全站搜索未启用
跳到主要内容

文本五:递归函数和函数指针

1.递归函数

递归函数就是在函数定义中,又存在调用自己的情况。

(1) int f(int n) {//求n!值

if(n==0 || n==1) return 1;

else return n*f(n-1);

}

int x=f(5);

f(5):5*f(4):5*4*f(3):5*4*3*f(2):

5*4*3*2*f(1):5*4*3*2*1:5*4*3*2:

5*4*6:5*24:120//x=120

(2) int Sum(int a[], int n) {

if(n==1) return a[0];

else return a[n-1]+Sum(a,n-1);

}

int a[5]={2,5,4,8,6};

int z=Sum(a,5);

a[4]+Sum(a,4) = 6+Sum(a,4)

6+a[3]+Sum(3) = 6+8+Sum(3)

6+8+a[2]+Sum(2) = 6+8+4+Sum(2)

6+8+4+a[1]+Sum(1)= 6+8+4+5+Sum(1)= 6+8+4+5+2

6+8+4+7:6+8+11:6+19:25//z=25

2.函数指针

一个函数指针就是相应函数的执行代码保存在内存中的首地址。

函数名的值是为该函数执行代码的首地址,即为指向该函数的指针。

函数名和数组名都是指针常量,其值不允许被修改。

例如:int fa(int x, int y){return x+y;}

//fa的值的类型: int (*) (int, int)

定义函数指针变量并赋予同类型函数的函数名的值后,可以同函数名一样使用。

如:int (*fp) (int, int)=fa;//用fa的值初始化fp函数指针

//此后进行fa(a,b)与fp(a,b)函数调用是等价的。

函数指针也可以成为另一个函数的参数:

如:void fc(char* p, int hf(int, int));//hf为函数参数

//等价表示:int (*hf)(int, int)

//可进行fc("abc", fa)或fc("abc", fp)调用,fa和fp为函数实参

最后修改: 2019年09月26日 Thursday 19:06