使用代码来计算余数的阶乘和

我一直在努力处理这些代码,但似乎并没有把握我做错了什么。

该代码假设计算:具有模式[(-1)^ i(x)^ 2i] /(2i)的一系列“余弦”的和!

这是我迄今为止的代码:

#include <stdio.h>
#include <math.h>

float factorial(int n){
    if (n==0)
        return 1;
    else
        return 2*n*factorial(n-1);
}

int main (){
    float i, n;
    float sum=0;
    printf("Enter desired interger: ");
    scanf("%f", &n);

    for (i=0; i<=1; i++) 
        sum = sum + (pow(-1,i)*pow(n,2*i))/(factorial(n));

    printf("The value is %fn", sum);
    return 0;
}

我仍在努力,任何信息或帮助将不胜感激!

编辑:

只是修复了它们,这是我必须用于教授的新格式:

#include <stdio.h>
#include <math.h>
int factorial(int n)
{
if (n==0) return 1;
else
return n*factorial(n-1);
}
float mycos(float x)
{
float sum=0;
int i;
for (i=0;i<=10;i++) sum = sum + (pow(-1,i)*pow(x,2*i))/factorial(2*i);
return sum;
}
int main()
{
int i=1;
printf("     x    mycos(x)   cos(x)n");
for (i=1;i<=10;i++)
printf(" %f %f %fn", i*.1, mycos(i*.1), cos(i*.1));
return 0;
}

谢谢大家的解释,他们帮了大忙!


我看到的一件事是,你的for循环只能运行2次真正的迭代,一次为i == 0,再次为i == 1。

为了泰勒扩展能够相当有效地工作,需要通过更多的序列术语来运行(更多循环迭代)。

我看到的另一件事是,你的分母是n! 而不是(2 * n)!

为了提高效率,我可能还会执行如下的阶乘例程:

unsigned int factorial(int n){
    unsigned int product = 1;

    for(int I = 1; I <= n; I++) product *= I;

    return product;
}

上述因子例程用于更精确的因子计算,也许您不需要此目的。 为了您的目的,也许浮点变体可能会足够好。

float factorial(int n){
    float product = 1;

    for(int I = 1; I <= n; I++) product *= (float)I;

    return product;
}

我还应该注意到为什么我要说以这种方式进行阶乘。 一般来说,循环结构比递归对象更有效率。 你当前的实现是递归的,因此我提供的实现应该从性能和内存利用率上更有效率。


考虑到计算费用,你需要停止计算一个点的序列。 你走得越多,结果就会越精确,但程序花费的时间越多。 这个简单的程序如何:

#include <stdio.h>
#include <math.h>

#define ITERATIONS 10 //control how far you go

float factorial(int n){
    if (n==0)
        return 1;
    else
        return n*factorial(n-1);
}

int main (){
    float n;
    float sum=0;
    printf("Enter desired float: ");
    scanf("%f", &n);

    int c, i;
    for (i=0; i<=ITERATIONS; i++) {
        c = (i%2)==0? 1 : -1;
        sum = sum + (c*pow(n,2*i+1))/(factorial(2*i+1));
    }

    printf("The value is %fn", sum);
    return 0;
}

你的factorial()函数实际上计算2n.n !,这可能不是你想到的。 要计算(2n)!,需要从函数体中移除2*并调用factorial(2*n)

链接地址: http://www.djcxy.com/p/70983.html

上一篇: Working on code to calculate cosine with factorial sum

下一篇: Need an algorithm to calculate pi in parallel with pthreads in c