C语言 求
1+3/2+....+(2n-1)/n!
//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);
}