为什么使用指针的递归函数在调用一次时有效,而在重新运行程序时无效



我被要求实现一个函数"折叠";对于以双表、其int大小、双初始值和双函数为参数的评估。它应该通过将函数累积应用于表的元素来返回一个double,从初始值开始。

例如,对于表{1.0,2.0,3.0,4.0,5.0},初始值10.0和加法函数,它应该返回:

(10.0+1.0(+1.0(+2.0(+3.0(+3.0+4.0(+4.0(+5.0(=5.0(=40.0

我知道我本可以迭代,但出于某些原因,我决定成为一名优雅的程序员,并使用递归。这是我的程序:

double fold(double* tab, int size, double init, double func(double, double)){
double result = func(func(init, *tab), *tab);
if (size > 0){
return fold(tab + 1, size - 1, result, func);
}
return result;

}

这是我的测试:

int main(){
double init = 10.0;
double table[5] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
double result = fold(table, 5, init, &add);
printf("Expected: %f, Result: %f", 40.0, result);

}

当运行一次时,它会给我正确的结果,但当我重新运行时,它的值会爆炸式增长。有人知道问题出在哪里吗?

当size==0时,引用表[5],它是表[]的随机内存。将if (size > 0) {更改为if (size > 1) {

最新更新