注意,实现方法有三种 数学法 循环法 递归法,最好的是数学法,其它不推荐


/*
* 题:计算 1+2+3+...+99+100
*/

/*
* 最佳解法是使用等比数列求和公式
* @brief 等差数列求和
* @param start 数列的首
* @param end   数列的尾
* @param step  数列的步长 1 2 3... 的步长就是1; 100 99 88 步长就是-1
* @return 等差数列的和
*/
int ArithmeticProgressionSum1(int start, int end, int step)  // 数学公式
{
    return (start + end) * ((end - start) / step + 1) / 2;
}
// 递归, 如果递减数列,step>0,则会出现无限递归;同理 如果递增数列,step<0,也会出现无限递归
int ArithmeticProgressionSum2(int start, int end, int step)  
{
    if (start == end)
    {
        return end;
    }
    return start + ArithmeticProgressionSum2(start + step, end, step);
} 

int ArithmeticProgressionSum3(int start, int end, int step) // for 循环
{
    int sum = 0;
    for (int i = start; i <= end; i += step)
    {
        sum += i;
    }
    return sum;
}
最后编辑:2020年12月09日 ©著作权归作者所有

发表评论