2015-11-11 2 views
0

Я только начинаю учиться C. Я пытаюсь найти максимальное значение int путем вычисления (на самом деле я пытаюсь найти максимальное значение float через тот же метод, но я хочу сначала проверить его на int). Логика кажется ОК, но моя функция всегда возвращает 0 в конце.Функция для вычисления максимального значения int, не возвращающего желаемый результат

int max_int_helper(int base) 
{ 
    int prev_i, next_i, counter; 
    counter = 1; 
    prev_i = next_i = base + counter; 

    // found max 
    if (next_i < base) { 
    printf("WE RETURN BASE %d\n", base); 
    return base; 
    } else { 
     while(prev_i <= next_i) 
     { 
     prev_i = next_i; 
     counter *= 2; 
     next_i = base + counter; 
     } 
     max_int_helper(prev_i); 
    } 
} 

Я называю это в моей основной функции как этот

printf("max int calculated: %d", max_int_helper(0)); 

Но когда я бегу, что я получаю это:

Отдаем БАЗА 2147483647 макс INT рассчитывается: 0

Я явно помещаю инструкцию printf, так что я «уверен», что я возвращаюсь только один раз, и значение верное.

Пожалуйста, укажите мне, где это происходит.

+1

Вы * сделать * знать, что целочисленное переполнение не определено, верно? – EOF

+0

Я этого не делал. Теперь я это делаю. –

+1

Хорошо, посмотрите на стандарт C. C11 проект стандарта n1570 (открыто доступен в Интернете): '6.5 Выражения, раздел 5 Если при оценке выражения возникает исключительное условие (то есть, если результат не определен математически или нет в диапазоне представляемых значений для его тип), поведение не определено. ' – EOF

ответ

6

Это рекурсия. Вам нужно вернуть его значение.

Таким образом, в последней строке должно быть:

return max_int_helper(prev_i); 
+0

ОК, это работает, спасибо. –

Смежные вопросы