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