用C语言中的递归函数求 1!+21!+31!+......+201!

要求先用一个函数描述递归过程,最好是for循环!比如for n=1,return 1;else ......这样的写法!我真急用,递归过程最好是简单的for循环!主函数可以不用写,真的谢谢了!

#include<stdio.h>

__int64 factorial( __int64 n)

{

    if( n == 1 )

        return 1 ;

    else

        return n*factorial ( n-1 ) ;

}

void main()

{

   __int64  factorial_sum = 0;

    for(__int64 i = 1 ; i < 202 ; i++ )

        factorial_sum += factorial( i ) ;

    printf("The answer is :%I64d\n",factorial_sum);

}

 

运行结果如图 

需要注意的是,1!+21!+31!+......+201!的结果大的惊人,已经不能用长整形来表示了,所以要用到64位整型数,即用64位来表示一个整数,其范围自己算吧

 

 

如有不足,欢迎指正!

追问

哥们,我觉得你这算法不是算我这题的啊,你是从1加到201了吧,尤其是i=1,i++,明显是加的1啊??而这个1+21+31这样有规律的,我们这题不需要上机实验,只需要把思路写出来,老师说递归环节用个数学公式就表示出来了,n=1的时候,返回值是1,1<n<=20的时候,用n*10+1 就表示出来了,你觉得呢??

追答

额……我想你可能还是不理解我的程序,我的 factorial() 函数已经实现了阶乘的功能,main() 函数里面的 for 循环只是把各个阶乘和结果加起来而已,我的递归就在 return n*factorial ( n-1 ) 一句话里面。而且既然是阶乘,那么其溢出问题不容忽视,用 int 来算显然是不明智的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-02
求n!的递归函数:
int fac(int n)
{
int 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);
}

希望对你能够有所帮助,如果满意,请选满意回答~~本回答被网友采纳
第2个回答  2012-11-03
数太大了 根本不行,不信的话你求一下30的阶乘,会溢出的,没办法,用大整数运算吧
第3个回答  2012-11-03
#include <stdio.h>
#include <stdlib.h>

size_t factorial(size_t n);
size_t factorial_for_1(size_t n);

int main(int argc, char *argv[])
{
size_t n = 11;
if (argc != 0)
{
n = (size_t)atoi(argv[1]);
}

printf("%zd\n", n);
printf("%zd\n", factorial_for_1(n));
return 0;
}

size_t factorial_for_1(size_t n)
{
if (n % 10 != 1)
{
return 0;
}
else if (n == 1)
{
return 1;
}

return factorial(n) + factorial(n-10);
}

size_t factorial(size_t n)
{
if (n == 1)
{
return 1;
}
return factorial(n-1) * n;
}
相似回答