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