代码如下:
方法1:
/*************************
*程序功能:求阶乘(递归)
*时间:2019年10月00日
*************************/
#include<stdio.h>
int f(int a);
int main(int argc, const char *argv[])
{
int n,i,a;
printf("input:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
a=f(i);
printf("%d ",a);
}
putchar(10);
return 0;
}
int f(int a)
{
if(a==1 || a==0)
return 1;
return a*f(a-1);
}
方法2:
/****************************************************
*功能:用递归算法求阶乘
*作者:lml 时间:2020年4月17日 11:48
****************************************************/
#include <stdio.h>
//阶乘公式:N!=N*(N-1)! <=> N!=N*(N-1)*(N-1-1)*....*2*1
int facturial(unsigned int a,unsigned int n)
{
printf("a:%d n:%d \n",a,n); //显示每次回调的过程。
if(n <= 1){ //,结束条件。当n=1的时候就结束。
printf("res:%d\n",a);
return a;
}
a=a*(n-1);
facturial(a,n-1); //把本次结果和n-1再次回调自身函数
}
int main(int argc, const char *argv[])
{
unsigned int N,res=1; //N是要求的数,res是最后的结果,开始为定义为1
printf("ps input num:");
fflush(stdout);
scanf("%d",&N); //给定的数不宜太大,否则超出计算范围
facturial(res,N);
return 0;
}
结束。