Помогите найти ошибку в программе расчета факториала - C (СИ)
Формулировка задачи:
Начал Си учить в студии13 печатаю по статье и решил факториал писать, ну где 1*2*3*4 и дальше числа. Ясно чё фигня, но и тут запара.
Ввожу "-1" и оно вроде пишет чтоб ввод повторил, пишу 5 и пишет 120, но потом жму энтер, а оно мне -1. Какого?
Спасибо, ребятки за возможные ответы. Помогите жизу разрулить.
#include <stdio.h>
#include <windows.h>
#include <locale.h>
int factorial(short n);
int main()
{
setlocale(LC_ALL, "Rus");
printf("Введите число для вычисления его факториала\nn = ");
int n;
scanf_s("%d",&n);
printf("%d",factoial(n));
getch();
return 0;
}
int factoial(short n)
{
if ((n < 0) || (n > 10))
{
printf("Повторите ввод!");
main();
}
if (n == 0)
return 1;
if (n <= 2)
return n;
return(n * factoial(n - 1));
}
А, в программе наверно надо после 23-ей строки, после main(); добавить exit(0);???
Вроде чёта чухается и не грузит по кругу циклы и лишнего нету. Ну так наверное неправильно.
Решение задачи: «Помогите найти ошибку в программе расчета факториала»
textual
Листинг программы
#include <stdio.h>
int main(int argc, char ** argv) {
if ( argc > 1 ) {
printf("%s ", argv[argc-1]);
main(argc - 1, argv);
}
else
printf("\n");
return 0;
}
Объяснение кода листинга программы
В данном коде реализована рекурсивная функция для вычисления факториала числа.
- Включаем заголовочный файл stdio.h, который содержит функции ввода-вывода.
- В функции main() проверяем, больше ли количество аргументов, переданных в программу, единицы. Если это так, то выводим последний аргумент, представленный в виде строки, и вызываем рекурсивно функцию main() с уменьшенным на единицу количеством аргументов.
- Если количество аргументов, переданных в программу, равно единице, то выводим символ новой строки.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.