请解答一下下面代码的具体含义,为什么int main放在下面了

编写函数,根据给定公式计算 e的值:1+1/1!+1/2!+1/3!+……+1/n!的值(取前n 项),要求在主函数中输入 n的值,调用函数并输出结果。 已做函数如下,有人可以解析一下嘛,不太懂这个函数每个步骤的意思。有没有更简单的方法,这个看不太懂。 #include double f(int n){ if(n == 0 || n == 1) return 1.0; else return f(n - 1) * n; }

int main(){
int N;
scanf("%d", &N);
double s = 0;
int i;
for(i = 0; i <= N; ++i)
s += 1.0 / f(i);
printf("%lf",s);
return 0;
}

如有帮助,望采纳

这一步相当于创建了一个函数    返回值为double 的f()方法
 #include double f(int n){
 if(n == 0 || n == 1) {
return 1.0;} else {
return f(n - 1) * n; 
}
}

int main(){   主函数
int N;        创建一个变量用来接收输入的值
scanf("%d", &N);
double s = 0;      s用来接收最后计算后的结果
int i;    循环的i
for(i = 0; i <= N; ++i)   最多循环n轮
s += 1.0 / f(i);     每循环一次   s的值在原来的基础上进行新的计算      s=s+1.0*f(i)
  此处的f(i)   就调用了最上面的f方法   ,i是形参,用来在最上面的方法里面计算
printf("%lf",s);      打印当前循环的s的值
return 0;
}

f就是定义一个简单的递归,用于计算n!,下面主方法正常调用(1/n!),for循环为了实现1+1/1!+1/2!+1/3!+……+1/n!

只能递归实现 ,因为你这个函数也是递归函数

1.因为函数变量等需要声明(我有这个东西),才能用。所以int main()可以放上面,不过要提前声明f()函数。
2.这个f()函数,确实效率不行,每次计算N!都需要计算(N-1)!,效率为N方。

//O(n)

#include<stdio.h>

double f(int n);//声明
int main()
{
    int N = 0;
    scanf("%d",&N);
    double _ans = 0;
    for (int i = 0 ; i <= N ; i++)
    {
        _ans += f(i);
    }
    printf("%.15f\n",_ans);
}

double f(int n)
{
    static long long _cur = 1;
    if (n == 0 || n == 1)
    {
        return 1.0f;
    }
    else
    {
        _cur *= n;
        return 1.0f / _cur;
    }
}