在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;
    }