Конечное условие (div == m
) никогда не будет верным. Чтобы div
стало равным m
, число k
должно делиться на все чисел в диапазоне [n,m)
.
Редактировать : Я перечитал текст в вызове printf()
, чтобы понять, что делает функция. Вы ищете первое число, делимое на все числа в диапазоне. Если мои расчеты верны, это число должно быть произведением всех уникальных простых множителей чисел в диапазоне. Для диапазона [1,13]
(согласно вызову функции, а не текста) это число должно быть:
30030 = 1 * 2 * 3 * 5 * 7 * 9 * 11 * 13
Теперь это означает, что вы собираетесь вызывать функцию рекурсивно более 30000 раз, что, очевидно, слишком много раз для размера стека, который вы используете (значения по умолчанию относительно малы). Для диапазона такого размера вы должны рассмотреть возможность написания итерационной функции.
Редактировать : вот итерационная версия, которая, кажется, работает.
int smallPos ( int n, int m )
{
int k = 0;
while ( ++k )
{
int count = 0;
for (int i = n; i<=m; i++)
{
if (k%i==0) {
++count;
}
}
if (count == (m-n+1)) {
return k;
}
}
return k;
}
Действительно, результат для smallPos(1,10)
, результат - 2520. Кажется, моя предыдущая оценка была нижней границей, а не фиксированным результатом.