我正在研究一个因子总和,如: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语句吗?
答案 0 :(得分:1)
您应该使用float
作为factorial()
的返回值(如果您使用0
,则只能获得1
或int
)且其逻辑是不正确。
您需要将其更改为
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;
}