C语言用递归可以做出来吗

C语言 求
1+3/2+....+(2n-1)/n!

img


//C语言 求
//1+3/2+....+(2n-1)/n!
#include <stdio.h>
#include <assert.h>
double fact(int n) {
    if (n==1) return 1.0;
    return fact(n-1)*(double)n;
}
double calc(int n) {
    if (n==1) return 1.0;
    return calc(n-1)+(2.0*n-1.0)/fact(n);
}
int main() {
    int n;

    scanf("%d",&n);
    assert(1<=n && n<=17);
    printf("%.15lg\n",calc(n));
    return 0;
}

“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出


double functionX(int n)
{
    if(n == 1)
    {
        return 1;
    }
    else
    {
        int m = 1;
        for (int i = 1; i <= n; ++i) {
            m *=i;
        }
        return functionX(n-1) + (2.0*n-1)/m;
    }
}


void main()
{
    double d = functionX(3);
    printf("%f",d);
}