double jc(double n)
{
if(n>1)
return jc(n-1)*n
else
return 1
}
int main()
{
double i
for(i=0i<=20i++)
printf("%.0lf\n",jc(i))
}
再给一个完全用递归的:
#include "stdio.h"
double jc(double m,double n)
{
if(m>1)
{
if(n>1)
{
if(m==n)
printf("%.0lf\n",jc(m,n-1)*n)
else
return jc(m,n-1)*n
}
else
{
if(m>0)
jc(m-1,m-1)
return 1
}
}
else
{
printf("1\n")
}
}
int main()
{
double s[20],m
m=20
jc(m,m)
}
对于阶乘,你需要考虑到输入的数的大小,进行判断n<0,无阶乘;n==0||n==1阶乘为1;n>1的就用户循环,或者调用函数来做
1.循环
#include<stdio.h>
void main()
{
float sum=1
int n,i
printf("please enter an integer number:")
scanf("%d",&n)
printf("\n")
if (n<0)
printf("n<0,data error!\n")
else if(n>1)
{
for(i=2i<=ni++)
sum=sum*i
printf("%d!=%10.0f\n",n,sum)
}
else
if(n==0||n==1)
{
sum=1
printf("%d!=%10.0f\n",n,sum)
}
}
2.函数
#include <stdio.h>
void main()
{
float fac(int n)
int n
float y
printf("input an integer number:")
scanf("%d",&n)
y=fac(n)
printf("%d!=%10.0f\n",n,y)
}
float fac(int n)
{
float f
if(n<0)
{
printf("n<0,data error")
}
else
if(n==0||n==1)
f=1
else
f=fac(n-1)*n
return (f)
}
使用 unsigned long long 类型绝对的够了,下图是最后的运算结果:
unsigned long long 类型是C语言里面目前精度最高的数据类型,
double或者long double 虽然也占有8个字节,但是他们的实际精度只有53位,
而 unsigned long long 却有64位的精度,
具体的话,可以看我的帖子:
① C语言视频 VS2015:[7]基本数据类型:
http://jingyan.baidu.com/article/ceb9fb10c1abac8cad2ba0ca.html
② C语言视频 VS2015:[10]printf:
http://jingyan.baidu.com/article/8ebacdf021253d49f65cd539.html
希望对你有用,我是ndk吧吧主,有问题可以ndk吧留言,谢谢!