Добавьте оператор printf
в начало вашей bq
функции:
void bq(int* v, int s, int e) {
printf("e=%d, s=%d, e+s+1=%d\n", e, s, e + s + 1);
if (e + s + 1 > 2) {
Когда вы запустите свою программу, вы увидите, что это вывод;
e=9, s=0, e+s+1=10
e=9, s=6, e+s+1=16
e=9, s=9, e+s+1=19
e=9, s=10, e+s+1=20
e=9, s=11, e+s+1=21
e=9, s=11, e+s+1=21
e=9, s=11, e+s+1=21
e=9, s=11, e+s+1=21
e=9, s=11, e+s+1=21
e=9, s=11, e+s+1=21
e=9, s=11, e+s+1=21
e=9, s=11, e+s+1=21
e=9, s=11, e+s+1=21
e=9, s=11, e+s+1=21
...
Другими словами, функция bq
сходится к простому рекурсивному вызову себя с теми же параметрами: bq(v, 9, 11)
.Но поскольку 9+11+1
всегда больше, чем 2
, он находится в бесконечном рекурсивном цикле.В противном случае известен как переполнение стека.В результате у вас заканчивается память стека, и программа вылетает.
Мои экстрасенсорные способности предлагают следующую строку:
if (e+s+1 > 2){
Был предназначен для выражения "если у меня есть хотя бы два элементав диапазоне v [s..e] ".В этом случае он должен выглядеть следующим образом:
if (e-s+1 > 2){
Не уверен, что остальная часть вашей программы правильная, но это только начало.