Как сделать арифметическую прогрессию в C++?

начал изучать C++ в универе, 1 курс, но это не важно. На лабе задали сделать арифметическую и геометрическую прогрессию и сложить суммы всех членов в той и в другой прогрессиях. Запретил использовать циклы и проверку условия if. Код целиком скидывать не прошу, просто натолкните на путь истинный, пожалуйста. Но от кода тоже не откажусь, постараюсь разобраться. Всем мир.


Ответы (1 шт):

Автор решения: tr1ang1e

Могу предложить три варианта. На примере арифметической прогрессии. В Вашей формулировке не совсем ясно, что имел в виду преподаватель (а может, это он так поставил задачу), так что мы практически пальцем в небо тыкаем.

Самый очевидный и простой вариант, который предложил господин MBo из комментариев - воспользоваться формулой арифметической прогрессии.

int main( )
{
    int first  = 1;     // первый член прогрессии
    int step   = 1;     // разность прогрессии
    int number = 10;    // количество суммируемых членов
    
    int result = (2 * first + step * (number - 1)) * number / 2;
    cout << result << endl;
}

Вариант второй - использовать рекурсию вместо цикла и тернарный оператор ?: вместо if (switch)

int arithmetic(int steps, int previous, int add)
{
    steps
    ? previous += arithmetic(steps - 1, previous + add, add)
    : previous
    ;
    
    return previous;        
}

int main( )
{       
    int first  = 1;
    int step   = 1;
    int number = 10;

    int result = arithmetic(number - 1, first, step);  
    cout << result << endl;     
}

Вариант третий - совсем без условных переходов (даже в виде хитрого тернарного оператора) - рекурсия с использованием шаблонов. Навряд ли это на первом курсе дают - разделяю мнение господина Wlad в комментариях.

Но раз мы не знаем точного задания, то просто Вам на будущее и для любопытства. Ну и может просто еще кому-то понадобится.

template<int steps>
int arithmetic(int previous, int add)
{   
    previous += arithmetic<steps - 1>(previous + add, add);
    return previous;
}

template< >
int arithmetic<0>(int previous, int add )
{
    return previous;
}   

int main( )
{
    int first  = 1;
    int step   = 1;
    int number = 10;

    int result = arithmetic<number - 1>(first, step);
    cout << result << endl;
}
→ Ссылка