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

1、C语言递归函数

参考文档:C语言递归

2、递归求阶乘数列

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

#include <stdio.h>
#include <stdlib.h>

int fac(int n)                // 定义fac函数
{
	int f;
	if(n<0)                     // n不能小于0
		printf("n<0,data error!");
	else if( n==0 || n==1)         // n=0 or n=1 ,阶乘都为1
		f=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、递归输出一个整数的逆序

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

#include<stdio.h>
void 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<stdio.h>//头文件 
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)的输出已大得不能准确计算。代码如下,

#include<stdio.h>
int 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;
}

推荐文档