Я пишу программу для вычисления факториала числа. Я использую рекурсию для решения этой проблемы. Проблема, с которой я сталкиваюсь, заключается в том, что, как только я достигну числа 13, он выдаст мусорные числа из-за ограничения INT. Что я хочу сделать, так это реализовать способ поймать ошибку, когда она произойдет (без жесткой привязки, которая должна остановиться при x = 13, а скорее по выходным данным). Это моя попытка:
#include <stdio.h>
int factorial( int n)
{
printf("Processing factorial( %d )\n", n);
if (n <= 1)
{
printf("Reached base case, returning...\n");
return 1;
}
else
{
int counter = n * factorial(n-1); //Recursion to multiply the lesser numbers
printf("Receiving results of factorial( %d ) = %d * %d! = %d\n", n, n, (n-1), counter);
if( counter/n != factorial(n-2) ) //my attempt at catching the wrong output
{
printf("This factorial is too high for this program ");
return factorial(n-1);
}
return counter;
printf("Doing recursion by calling factorial (%d -1)\n", n);
}
}
int main()
{
factorial(15);
}
Проблема в том, что программа теперь никогда не завершается. Он продолжает зацикливаться и выдавать мне случайные результаты.
Поскольку я не могу ответить на свой вопрос, я отредактирую свое решение:
int jFactorial(int n)
{
if (n <= 1)
{
return 1;
}
else
{
int counter = n *jFactorial(n-1);
return counter;
}
}
void check( int n)
{
int x = 1;
for(x = 1; x < n+1; x++)
{
int result = jFactorial(x);
int prev = jFactorial(x-1);
if (((result/x) != prev) || result == 0 )
{
printf("The number %d makes function overflow \n", x);
}
else
{
printf("Result for %d is %d \n", x, result);
}
}
}
counter / n
когда-либо равнялосьfactorial(n-2)
? Не обращайте внимания на тот факт, что добавление дополнительного рекурсивного случая немного сомнительно, ваша математика просто неверна. - person hobbs   schedule 04.06.2014factorial(n-2)
, этоfactorial(n-1)
. - person hobbs   schedule 04.06.2014