注册 登录
编程论坛 C语言论坛

各位大佬,我是新手。如下代码运行时偶数能正常阶乘求和,但是奇数就输入数字但是不给结果,想了很久都没想出来,请求大佬帮忙指出问题,谢谢各位大佬了!

wys02 发布于 2023-01-18 14:54, 907 次点击
  #include<stdio.h>
  int f(int x)
  {
      if(x==1)
      {
          return 1;
      }
      else
      {
          return x*f(x-1);
      }
  }
  int main()
  {
      int x,y=0;
      scanf("%d",&x);
    while(x!=0&&x!=-1)
    {
        y=y+f(x)+f(x-1);
        x-=2;
    }
      printf("%d\n",y);
      return 0;
  }
2 回复
#2
oped022023-01-18 15:02
在main函数中,当x为奇数时,每次循环将会减2,而不是1。这会导致最后x=-1时循环终止,而没有计算x的阶乘。因此,输入奇数将不会返回正常答案。

此外,每一次循环都会累加f(x)+f(x-1),而没有考虑x为奇数时,f(x-1)不存在,会导致累加出错。

如果要保证输入奇数也能返回正常答案,可以在循环条件中添加判断x是否为奇数,或者在循环体中添加特判x为奇数的情况。
#3
wys022023-01-18 16:25
回复 2楼 oped02
好的好的,谢谢大佬!!!
1