用递归并不是很好,每次递归调用都要有一定的时间和空间的开销,当n不大时还可以,当n大到一定程度就会出现堆栈溢出,程序崩溃。
作为练习或是算法描述是可以的。
该问题如果不用递归算法实现阶乘可以做的更有效率。
递归算法:
#include
using namespace std;
long int fun(int n)
{
if(n==1)return 1;
return ((long int)n)*fun(n-1);
}
int main()
{
long int S=0;
int n;
cout<<"请输入一个正整数"<
for(int =1;i<=n;i++){
S+=fun(i);
}
cout<<"S="<}
非递归算法
#include
using namespace std;
int main()
{
long int S;
long int T=1;
int n;
cout<<"请输入一个正整数"<
for(int i=1;i<=n;i++){
T=(long int)i*T;
S=S+T;
}
cout<<"S="<}
#include
#include
fun(int x);
int main(void)
{
char *pszBuff = NULL;
int a;
int i=1;
int sumResult = 0;
printf("input a int number::");
scanf("%d", &a);
for(i=1;i<=a;i++)
{
int tmp = fun(i);
sumResult = sumResult + tmp ;
printf("%d!=%d, 1-%d的阶乘的和为%d\n",i,tmp,sumResult );
}
return 0;
}
int fun(int x)
{
int ret;
if(x == 1) return 1;
ret = fun(x-1)*x;
return ret;
}
#include
void main()
{
int n,i,j;
long num=1,sum=0;
printf("input a int number::");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
num*=j;
sum+=num;
}
printf("%d!=%d, 1-%d的阶乘的和为%d\n",i,num,i,sum);
num=1;
sum=0;
}
}
#include
int jiecheng(int x)
{
int sum=1;
int i;
for(i=1;i<=x;i++)
sum=sum*i;
return sum;
}
main()
{
int n,i,j,sum=0;
printf("求阶乘\n");
printf("请输入一个数N:N<10\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{ printf("%d!的阶乘为%d ",i,jiecheng(i));
for(j=1;j<=i;j++)
sum=sum+jiecheng(j);
printf(" 1-%d!的阶乘和为%d\n",i,sum);
sum=0;
}
}