Рекурсивная функция неправильно обрабатывает аргумент, когда он равен нулю.
Переписать функцию следующим образом
unsigned long long summ( unsigned int x )
{
return x == 0 ? 0 : x + summ( x - 1 );
}
Нет смысла объявлять параметр как имеющий целочисленный тип со знаком, если вы собираетесь вычислить сумму неотрицательных чисел.
Вот демонстрационная программа
#include <iostream>
unsigned long long summ( unsigned int x )
{
return x == 0 ? 0 : x + summ( x - 1 );
}
int main()
{
const unsigned int N = 10;
for ( unsigned int i = 0; i < N; i++ )
{
std::cout << summ( i ) << ' ';
}
std::cout << '\n';
return 0;
}
Вывод программы:
0 1 3 6 10 15 21 28 36 45