Функция возвращает 0, когда это не должно быть сделано
Я попытался написать функцию, которая вычисляет факториал числа. Почему он всегда возвращает 0 независимо от того, какое число вычисляется?
Что я уже пробовал:
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> int getfactorial(int number){ if (number > 0){ return number*getfactorial(number-1); } if (number <= 0){ return 0; } } int main() { printf("%d", getfactorial(5)); return 0; }
0x01AA
Потому что if (number <= 0){
return 0;
}
Две возможности для решения этой проблемы:
один.) if (number <= 0){
return 1;
}
б.)
if (number > 1){
return number*getfactorial(number-1);
}
else {
return 1;
}
Member 14955513
Ну, я делаю задание, и оно говорит, что программа должна вернуть 0, если число не может быть вычислено. Или возврат 1 считается тем же самым?
Rick York
Почему факториал числа не может быть вычислен? Я думаю, что это будет потому, что он меньше нуля, или результат будет слишком большим для используемого типа данных. Для 32-битного результата максимальное значение равно 4G или 2^32. Вам нужно будет выяснить, какое самое большое значение, факториал которого меньше максимального, и установить его как самый большой допустимый входной сигнал. Если вы используете 64-битные значения, то максимум будет еще больше.
Dave Kreskowiak
Зачем вы вообще вставляете это второе утверждение if? Если первый тест числа возвращается ложным, то число всегда будет равно или меньше нуля.
Вы могли бы легко увидеть, что произойдет, если вы научитесь использовать отладчик. Это самый мощный инструмент, который вы можете использовать, чтобы понять, что делает ваш код.