从头开始学C语言第三十五天——指针函数、递归函数
指针函数
是指函数返回值为地址值的函数
定义:
<数据类型> *<函数名称> (<参数说明>)
{
语句序列;
}
指针函数的返回值:全局变量的地址/static变量的地址/字符串常量的地址
用指针函数删除字符串中的空格
char *del(char *x);
int main()
{
char a[]="he ll o";
char *pa;
printf("%s\n",a);
pa = del(a);
printf("%s\n",pa);
return 0;
}
char *del(char x[])
{
char *px = x;
char *s =x;
while(*x != '\0')
{
if(*x != ' ')
{
*px = *x;
px++;
x++;
}
else
{
x++;
}
}
*px = '\0';
return s;
}
指针函数替代strcat函数
#include <stdio.h>
char *link(char a[],char b[]);
int main()
{
char tar[20]="hello";//注意容量问题
char m[]="world";
char *p;
puts(tar);
p = link(tar,m);
puts(p);
return 0;
}
char *link(char a[],char b[])
{
char *pa = a;
char *pb = b;
char *s = a;
while(*pa != '\0')
{
pa++;
}
while(*pb != '\0')
{
*pa = *pb;
pa++;
pb++;
}
*pa = '\0';
return s;
}
递归函数
指一个函数直接或间接调用函数本身
递归函数调用执行过程分为两个阶段
递推阶段:从原问题出发,按照递归公式递推从未知到已知,最终到达递归终止条件
回归阶段:按递归终止条件求出结果,并逐步带入递归公式,回归到原问题求解
例题:计算N的阶乘
以计算5的阶乘为例,从编程逻辑结合递归函数概念可以列出下表
5!=5*(5-1)! |
4!=4*(4-1)! |
3!=3*(3-1)! |
2!=2*(2-1)! |
1!=1 |
所以递归函数的终止条件就是当N=1时,这个就是递推阶段所求目标
已知N=1是终止条件,我们就可以把N带回到递推公式中,最终求得N的阶乘
#include <stdio.h>
int level(int a);
int main()
{
int n;
int lev;
scanf("%d",&n);
lev=level(n);
printf("%d",lev);
return 0;
}
int level(int a)
{
if(a==0 || a==1)
{
return 1;
}
else
return a*level(a-1);
}