求解5050问题的解法为什么递归返回不去了

#include"stdio.h"

int sum(int n)
{
return n&&(sum(n-1)+n)?sum(n-1)+n:0;
}

int main()
{
printf("%d\n",sum(100));
return 0;
}
求教为什么代码有问题

return n == 0 ? 0 : sum(n - 1) + n;

程序运行应该没有报错吧,估计是递归调用计算时间太久,把sum中的100换成10、20什么的还比较快,到27、28就要比较久的时间了。