c++ - 我如何递归地重写这个?

标签 c++ recursion sum iteration

我迭代写了一堆函数代码,我只想递归重做。我怎么做?没有不变量,我有点迷路。

当给定两个整数 low 和 high 时,该过程 计算函数 f 的过程将计算 f(low) + f(low + 1) + f(low + 2)+....+ f(高)。例如,( sumFunc(1, 9, square) == 285 )

int sumFunc(int low, int high, int f(int), int end) {
    if ( low == high)
        return f(low) + end;
    else 
        return sumFunc((low + 1), high, f(end + (f(low))));
}

int sum(int low, int high, int f(int)) {
    return sumFunc(low, high, f(int), 0);
}

谢谢!

最佳答案

我认为这就是您所追求的。这是不太安全的版本,要求调用者确保 low 在调用时不大于 high:

int sum(int low, int high, int f(int))
{
    return f(low) + ((low == high) ? 0 : sum(low+1, high, f));
}

如果在调用时 low 永远大于 high 是完全可能的,这需要一些安全检查以确保你不调用溢出。

int sum(int low, int high, int f(int))
{
    if (low < high)
        return f(low) + sum(low+1, high, f);

    if (high < low)
        return f(high) + sum(high+1, low, f);

    return f(low);
}

关于c++ - 我如何递归地重写这个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20307131/

相关文章:

Excel:求和公式

javascript - 每列的总和不基于 jQuery 中的类

c++ - 如何制作一个简单的 C++ Makefile

c++ - 打印 map 中的所有对

c++ - 这是一个糟糕的黑客攻击吗?带有虚拟类的 memcpy

python - 随机排列 DataFrame 的行,直到列中的所有连续值都不同?

javascript - SetInterval 函数中的这个递归调用是如何工作的?

python递归是按引用传递还是按值传递?

python - 对数字序列求和

c++ - 如何出现空输入的 AddressSanitizer 错误