2017-02-17 24 views
0

Я выполняю эти две функции, которые выполняют один и тот же расчет, суммируя первые N целых чисел, а затем сравнивают время выполнения для каждого из них. Программа отлично работает с небольшими входами, но проблема в том, что когда я ввожу большие числа, например 1000000, он вычисляет первый метод «iterativeSum()», после чего, как только он попадает в рекурсивныйSum(), он перестает работать.C++ сумма больших чисел, программные остановки?

Я не уверен, но вы думаете, что это может быть из-за cout?

#include <stdio.h> 
#include <iostream> 
#include <ctime> 
#include <cstdlib> 

using namespace std; 

void iterativeSum(int); 
int RecursiveSum(int); 


int main() 
{ 
long long posInt; 
std::cout << "Enter a positive integer: "; 
std::cin >> posInt; 

int start_s=clock(); 
iterativeSum(posInt); 
int stop_s=clock(); 

int start_s1=clock(); 
cout << "\nThe recursive algorithm to sum the first N integers of "<< posInt << " is: "<< RecursiveSum(posInt) << endl; 
int stop_s1=clock(); 

cout << "time: " << (stop_s-start_s)/double(CLOCKS_PER_SEC)/1000 << endl; 

cout << "time: " << (stop_s1-start_s1)/double(CLOCKS_PER_SEC)/1000 << endl; 


return 0; 
} 

void iterativeSum(int posInt) 
{ 
//positive Integer >=0 
int sum = 0; 


//loop through and get only postive integers and sum them up. 
// postcondion met at i = 0 

for(int i = 0; i <= posInt;i++) 
    { 
     sum +=i; 
    } 
    //output the positive integers to the screen 
    std::cout <<"\nThe iterative algorithm to sum the first N integers of " <<posInt <<" is: " << sum << "\n"; 
} 


int RecursiveSum(int n) 
{ 
if(n == 1) // base case 
{ 
    return 1; 
} 
else 
    { 
    return n + RecursiveSum(n - 1); //This is n + (n - 1) + (n - 2) .... 
    } 
} 
+0

У вас появляется сообщение об ошибке? Или программа имеет очень длительное время? BTW: вы должны добавить тег C++ к этому вопросу – Aemyl

+0

ошибок нет в компиляторе, время выполнения слишком длинное, поэтому окна останавливают запуск программы, как только она дойдет до метода recusiveSum? euhh, я не знаю, как добавить теги C++, но, извините: D – Ivawen

+0

Нет проблем, я добавил его сейчас (но вы должны принять редактирование). – Aemyl

ответ