开发手册 欢迎您!
软件开发者资料库

C语言递归函数相关的编程实例练习题

函数可以递归调用,也可以嵌套调用。递归调用是指自己调用自己,而嵌套调用是指两个或多个函数间相交叉互调用。本文主要介绍C语言中递归函数相关的编程实例练习题,以及相关的示例代码。

1、C语言递归函数

参考文档:C语言递归

2、递归求阶乘数列

利用一个函数进行递归求阶乘,但该数不能小于0,且若为0或1,得到的结果都为1,其它情况,执行递归调用,代码如下,

#include #include int fac(int n)                // 定义fac函数{int f;if(n<0)                     // n不能小于0printf("n<0,data error!");else if( n==0 || n==1)         // n=0 or n=1 ,阶乘都为1f=1;else f=fac(n-1)*n;           // n>1时,n!=n*(n-1)return(f);}//递归法求阶乘int main(){int fac(int n);              // 函数声明int n;             //声明要阶乘的数为int型int y;             //声明结果为int型printf("请输入一个整数:");scanf("%d",&n);              // 输入要阶乘的数y=fac(n);printf("%d!=%d\n",n,y);return 0;}

3、递归输出一个整数的逆序

通过递归方式,从大到小输出一个整数,示例代码如下,

#includevoid solve(int n){    printf("%d", n%10);    n/=10;    if(n>0) solve(n);}int main(void){    int n;    scanf("%d",&n);    solve(n);    return 0;}

4、将整数递归转换成字符串

C语言用递归方法将一个整数n转换成字符串,代码如下,

#include//头文件 int main()//主函数 {  void convert(int n);//函数声明   int number;//定义整型变量   printf("输入一个整数:");//提示语句   scanf("%d",&number);//键盘输入   printf("输出结构:");//提示语句   if(number<0)  {    putchar('-'); //先输出一个-号     putchar(' '); //再输出一个空格     number=-number;  }  convert(number);//调用自定义的转换方法   printf("\n");//换行   return 0;//主函数返回值为0 }void convert(int n)//自定义的转换方法 {   int i;//定义整型变量   if((i=n/10)!=0)//递归  {    convert(i);  }  putchar(n%10+'0');  putchar(32);}

5、递归实现Ackerman函数

阿克曼函数(Ackermann)是非原始递归函数的例子。它需要两个自然数作为输入值,输出一个自然数。它的输出值增长速度非常快,仅是对于(4,3)的输出已大得不能准确计算。代码如下,

#includeint Acm(int m,int n){    if(m==0&&n>0)        return (n+1);    else if(n==0&&m>0)        return Acm(m-1,1);    else        return Acm(m-1,Acm(m,n-1));}int main(void){    int m,n;    printf("请输入两个数:\n");    scanf("%d%d",&m,&n);    printf("m=%d,n=%d\n",m,n);    printf("Acm=%d", Acm(m,n));    return 0;}