在C中对任意函数1到10计数的函数
如何编写具有输入函数(对任何函数都是目标)、输入数字数组和输入数组长度的函数 功能:在C中对任意函数1到10计数的函数,c,recursion,accumulator,C,Recursion,Accumulator,如何编写具有输入函数(对任何函数都是目标)、输入数字数组和输入数组长度的函数 功能: double accumulator(double (*function)(double, double), double array[], int length) 主要内容: 问题是: double multiplicator(double (*function)(double, double), double array[], int length) { int temp = 1; for
double accumulator(double (*function)(double, double), double array[], int length)
主要内容:
问题是:
double multiplicator(double (*function)(double, double), double array[], int length)
{
int temp = 1;
for (int i = 0;i<length;i++)
{
temp = (*function)(temp, array[i]);
}
return temp;
}
double乘法器(double(*函数)(double,double),double数组[],int-length)
{
内部温度=1;
对于(inti=0;i两种想法:
您应该使用double temp
而不是int temp
加法和乘法需要有不同的起始值。求和应从temp=0
开始,但乘积应从temp=1
开始。否则乘积将始终为0
您可以添加另一个初始值参数:
double accumulator(double (*function)(double, double), double array[], int length, double initial)
或者使用第一个数组元素作为起始值(但随后需要检查数组为空的特殊情况):
值得一提的是,你的“累加器”函数在函数编程上下文中也被称为。如果你想用谷歌搜索这个词,这可能会有所帮助。它不适用于乘法,因为将任何东西乘以0
都会得到0
您需要使用第一个元素作为初始值
double accumulator(double (*function)(double, double), double array[], int length)
{
int temp = array[0];
for (int i = 1; i < length;i++) // start from #1
{
temp = (*function)(temp, array[i]);
}
return temp;
}
双累加器(双(*函数)(双精度,双精度),双数组[],整数长度)
{
int temp=数组[0];
对于(int i=1;i
如果您设置temp=array[0]
并在i=1
而不是i=0
开始循环,您的解决方案几乎就在那里了。对于边框大小写(空数组),您始终需要提供一个中性元素。是的,它可以工作!:)我想这会让我更复杂,一开始我很接近,只错过了一行:int-temp=array[0];
:)
double multiplicator(double (*function)(double, double), double array[], int length)
{
int temp = 1;
for (int i = 0;i<length;i++)
{
temp = (*function)(temp, array[i]);
}
return temp;
}
double accumulator(double (*function)(double, double), double array[], int length, double initial)
double temp = array[0];
double accumulator(double (*function)(double, double), double array[], int length)
{
int temp = array[0];
for (int i = 1; i < length;i++) // start from #1
{
temp = (*function)(temp, array[i]);
}
return temp;
}