如果要编写一个使用公式来计算e ^ x的递归函数,我有一项锻炼。我设法做到了,但是练习表明我必须将结果存储在数组中,这是我碰到的地方,这是我的代码:
double exp (double x, int n, int* fakt, double* xpot) {
static double result;
static int i;
static double *A;
A = (double *) malloc(n * sizeof(double));
if (i == n)
{
for(int k = 0; k < n; k++)
cout << A[k]; //this prints out garbage values
return result;
}
if (i != 0 || i != 1)
{
for (int j = 1; j <= i; j++)
*fakt = *fakt * j;
}
*xpot = pow(x, i);
result += *xpot / (double)*fakt;
A[i] = result;
*fakt = 1;
i++;
return exp(x, n, fakt, xpot);
}
我会将数组作为函数参数传递,但任务明确指出:
double exp (double x, int n, int *fakt, double *xpot);
是原型。 我的问题是,为什么循环会打印出垃圾值,并且有办法解决它?
答案 0 :(得分:5)
您没有初始化A
的值,这就是为什么打印垃圾的原因。
也:
if (i != 0 || i != 1)
等于if (true)
。exp
函数都会泄漏大量内存... A
永远不会
free
d xpot
和fakt
可能是nullptr
,有什么问题吗?