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;
}