Помогите найти ошибку в программе расчета факториала - 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;
}

Объяснение кода листинга программы

В данном коде реализована рекурсивная функция для вычисления факториала числа.

  1. Включаем заголовочный файл stdio.h, который содержит функции ввода-вывода.
  2. В функции main() проверяем, больше ли количество аргументов, переданных в программу, единицы. Если это так, то выводим последний аргумент, представленный в виде строки, и вызываем рекурсивно функцию main() с уменьшенным на единицу количеством аргументов.
  3. Если количество аргументов, переданных в программу, равно единице, то выводим символ новой строки.
  4. Возвращаем 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы