为什么在C中找到阶乘时却给出负值?

  • 我必须创建一个递归函数以查找从1到30的阶乘。
  • 阶乘值直到12都是正确的。从13开始,它给出了错误的值,其中一些为负。
  • 我使用“ unsigned long long long”,但是没有用。
  • 我将代码块用作编译器,因此我认为它只能处理最多32位整数。
  • 这是代码和输出。请帮我解决一下这个。
#include <stdio.h>
#include <math.h>

unsigned long int factorial_rec(unsigned long n)
{
  if(n==1) return 1;
  else return factorial_rec(n-1) * n;
}

int main(int argc, char **argv)
{
  int i;

  for(i=1; i<30; i++)
    printf("%d! = \t%d\n", i, factorial_rec(i));

  return 0;
}

输出:-

1! =    1
2! =    2
3! =    6
4! =    24
5! =    120
6! =    720
7! =    5040
8! =    40320
9! =    362880
10! =   3628800
11! =   39916800
12! =   479001600
13! =   1932053504
14! =   1278945280
15! =   2004310016
16! =   2004189184
17! =   -288522240
18! =   -898433024
19! =   109641728
20! =   -2102132736
21! =   -1195114496
22! =   -522715136
23! =   862453760
24! =   -775946240
25! =   2076180480
26! =   -1853882368
27! =   1484783616
28! =   -1375731712
29! =   -1241513984
评论
  • Arvin
    Arvin 回复

    您在这一行中犯了一个愚蠢的错误:

    printf("%d! = \t%d\n", i, factorial_rec(i));
    

    Use the specifier %lu instead of %d for factorial_rec(i) and you'll no longer get any error.

    正确的语法:

    printf("%d! = \t%lu\n", i, factorial_rec(i));