鱼C论坛

 找回密码
 立即注册
查看: 743|回复: 3

[已解决]C语言递归

[复制链接]
发表于 2021-1-7 14:55:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//递归求n的阶乘
#include<stdio.h>
int factorial(int x);
int main()
{
        int a,result;
        printf("输入一个数(求阶乘):\n");
       
        scanf("%d",&a);
        result=factorial(a);
       
        printf("a!=%d",result);
        return 0;
}
int factorial(int x)
{
        int fac=0;
        if(x<0)
        printf("%d the data is error!",x);
        else if(x==0||x==1)
        fac=1;
        else
        fac=x*factorial(x-1);
       
        return fac;
}


这一串代码是不是有个小问题啊,我如果输入一个负数,还是会输出“a!=0”,有没有什么可以改进的办法呀?谢谢大佬们
最佳答案
2021-1-7 15:49:37
本帖最后由 昨非 于 2021-1-7 15:50 编辑

求阶乘只对非负整数
负数时没有阶乘的,加个非法输入的判断就好了

  1. //递归求n的阶乘
  2. #include<stdio.h>
  3. int factorial(int x);
  4. int main()
  5. {
  6.         int a, result;
  7.         printf("输入一个非负整数(求阶乘):\n");

  8.         scanf("%d", &a);
  9.         while (a < 0)
  10.         {
  11.                 printf("输入非法,请重新输入:\n");
  12.                 scanf("%d", &a);
  13.         }

  14.         result = factorial(a);

  15.         printf("a!=%d", result);
  16.         return 0;
  17. }
  18. int factorial(int x)
  19. {
  20.         int fac = 0;
  21.         if (x < 0)
  22.                 printf("%d the data is error!", x);
  23.         else if (x == 0 || x == 1)
  24.                 fac = 1;
  25.         else
  26.                 fac = x * factorial(x - 1);

  27.         return fac;
  28. }
复制代码


测试结果:
  1. 输入一个非负整数(求阶乘):
  2. -5
  3. 输入非法,请重新输入:
  4. -3
  5. 输入非法,请重新输入:
  6. 5
  7. a!=120
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-7 15:49:37 | 显示全部楼层    本楼为最佳答案   
本帖最后由 昨非 于 2021-1-7 15:50 编辑

求阶乘只对非负整数
负数时没有阶乘的,加个非法输入的判断就好了

  1. //递归求n的阶乘
  2. #include<stdio.h>
  3. int factorial(int x);
  4. int main()
  5. {
  6.         int a, result;
  7.         printf("输入一个非负整数(求阶乘):\n");

  8.         scanf("%d", &a);
  9.         while (a < 0)
  10.         {
  11.                 printf("输入非法,请重新输入:\n");
  12.                 scanf("%d", &a);
  13.         }

  14.         result = factorial(a);

  15.         printf("a!=%d", result);
  16.         return 0;
  17. }
  18. int factorial(int x)
  19. {
  20.         int fac = 0;
  21.         if (x < 0)
  22.                 printf("%d the data is error!", x);
  23.         else if (x == 0 || x == 1)
  24.                 fac = 1;
  25.         else
  26.                 fac = x * factorial(x - 1);

  27.         return fac;
  28. }
复制代码


测试结果:
  1. 输入一个非负整数(求阶乘):
  2. -5
  3. 输入非法,请重新输入:
  4. -3
  5. 输入非法,请重新输入:
  6. 5
  7. a!=120
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-7 18:30:03 | 显示全部楼层
本帖最后由 WindyJane 于 2021-1-7 18:33 编辑

int factorial(int x)
{
        int fac=0;
        if(x<0)
        {
         printf("%d the data is error!",x);
         system("pause");//显示一下 %d the data is error!
        exit -1;//异常中断,退出, 不去执行return fac  以及后面的显示
       }
        else if(x==0||x==1)
        fac=1;
        else
        fac=x*factorial(x-1);
        
        return fac;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-9 10:12:24 | 显示全部楼层
WindyJane 发表于 2021-1-7 18:30
int factorial(int x)
{
        int fac=0;

谢谢你嗷
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-3 04:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表