c语言递归阶乘求和题

描述
求1+2!+3!+...+N!的和
要求使用递归实现
long long forOne(int X); // 计算单个数的阶乘 X为正整数
long long forAll(int N); // 全部数值计算 N为正整数

格式
输入格式
正整数N(N〈=20)

输出格式
1+2!+3!+...+N!的和 (结果为整数形式)

样例
样例输入
3
样例输出
9


#include <stdio.h>
long long forOne(int X){
    return X==1?1:X*forOne(X-1);
}
long long forAll(int N){
    return N==1?1:forOne(N)+forAll(N-1);
}
int main(void) {
    int n;
    scanf("%d",&n);
    printf("%lld",forAll(n));
    return 0;
}

#include<stdio.h>
int dg(int a)
{
    int i,s=1;
    if (a>= 1)
    {
        for (i = 1; i <= a; i++)
        {
            s = s * i;
        }
        return s + dg(a - 1);
    }
    else 
    {
        return 0;
    }
}
int main()
{
    int n;
    scanf("%d", &n);
    printf("%d", dg(n));
return 0;
}