Оптимизация суммирования серии (используя петли и рекурсию)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Оптимизация суммирования серии (используя петли и рекурсию)

Сообщение Anonymous »

Мне нужно сделать суммирование серии, которая работает следующим образом: 1+2+3+4+5+.....+n < /p>
, где 'n' следует за этим диапазоном: (1 ≤ n ≤ 10^9) < /p>
Правило, которое я должен следить В соответствии с надлежащим временным ограничением < /p>
Подход использования n * (n+1) /2 работает нормально, но я хотел бы узнать более сложные альтернативы < /p>
Я первоначально использовал рекурсию < /p>
int recur( int n )
{
if (n > 0) {
return n + recur( n - 1 ) ;
} else {
return 0 ;
}
}

int main()
{
int n ;
cin >> n ;
cout
Этот подход не удался в верхней половине диапазона «n», сделав исключение, поэтому я сделал цикл и ускорил этот цикл, я сделал оператор IF, чтобы выполнить рекурсию в нижней половине диапазона и фактическую цикл в верхней половине < /p>
Вот полный код < /p>
#include
using namespace std;

int recur( int n )
{
if (n > 0) {
return n + recur( n - 1 ) ;
} else {
return 0 ;
}
}

void verylong( int n )
{
long long sum = 0;
for( int i = 0 ; i n ;
if( n < 10000 ){
cout
Теперь результаты верны, но это работает на заметно медленном количестве в диапазоне, как это может улучшить? Есть ли в целом лучший подход? Что это за подход?>

Подробнее здесь: https://stackoverflow.com/questions/756 ... -recursion
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»