因子分数之和

时间:2014-02-10 05:47:48

标签: c

我正在研究一个因子总和,如:1/1!+1/2!+1/3!...,直到所需的计数。到目前为止,这是我的代码:

#include <stdio.h>
int factorial(int n)
{
    if (n==0)
        return 1;
    else
        return 1/(n * factorial(n-1));
}
int main ()
{
    int i, n;
    float sum=0;
    printf("Enter desired factorial fraction: ");
    scanf("%d", &n);
    for (i=1; i<=n; i++) sum = sum + factorial(i);
    printf("The value is %f\n", sum);
    return 0;
}

我对我正在做的事情有一个小小的想法,我对此非常陌生。我的思维过程是设置数字运算功能(我的行话可能已关闭),然后启动主函数。我以为我有正确的设置,但经过几个小时后,我感到很失落。任何帮助和指导将不胜感激。

更新

以下是更新后的代码:

#include <stdio.h>
float factorial(int n)
{
if (n==1)
return 1;
else
return ((1.0/n) * factorial(n-1.0));
}
int main ()
{
float i, n;
float sum=0;
printf("Enter desired factorial fraction: ");
scanf("%f", &n);
for (i=1; i<=n; i++) sum = sum + factorial(i);
printf("The value is %f\n", sum);
return 0;
}

非常感谢你们,现在唯一剩下的就是让我弄清楚为什么输入“0”不会产生结果“1”,因为0!= 1。我应该在“int main()”中移动if语句吗?

6 个答案:

答案 0 :(得分:1)

您应该使用float作为factorial()的返回值(如果您使用0,则只能获得1int)且其逻辑是不正确。

您需要将其更改为

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

这里可以看到完整的代码示例:http://ideone.com/o2XGhE

答案 1 :(得分:0)

factorial()的定义应为

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

main()函数中,您应该执行以下操作:

for (i=1; i<=n; i++) sum = sum + 1.0 / factorial(i);

答案 2 :(得分:0)

有一个单独的函数计算阶乘(n) 而不是添加剩下的代码,所以唯一递归的东西就是计算n!

答案 3 :(得分:0)

您的factorial()必须像这样

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

答案 4 :(得分:0)

你可以使用这个:

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

答案 5 :(得分:0)

一个优雅的解决方案是使用条件三元运算符:

float factorial(float n) {
  return n ? ((1/n) * factorial(n-1)) : 1;  
}