c语言题:用递归法求20个阶乘

Python025

c语言题:用递归法求20个阶乘,第1张

#include "stdio.h"

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吧留言,谢谢!