鱼C论坛

 找回密码
 立即注册
查看: 667|回复: 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 编辑

求阶乘只对非负整数
负数时没有阶乘的,加个非法输入的判断就好了
//递归求n的阶乘
#include<stdio.h>
int factorial(int x);
int main()
{
        int a, result;
        printf("输入一个非负整数(求阶乘):\n");

        scanf("%d", &a);
        while (a < 0)
        {
                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;
}

测试结果:
输入一个非负整数(求阶乘):
-5
输入非法,请重新输入:
-3
输入非法,请重新输入:
5
a!=120
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

求阶乘只对非负整数
负数时没有阶乘的,加个非法输入的判断就好了
//递归求n的阶乘
#include<stdio.h>
int factorial(int x);
int main()
{
        int a, result;
        printf("输入一个非负整数(求阶乘):\n");

        scanf("%d", &a);
        while (a < 0)
        {
                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;
}

测试结果:
输入一个非负整数(求阶乘):
-5
输入非法,请重新输入:
-3
输入非法,请重新输入:
5
a!=120
想知道小甲鱼最近在做啥?请访问 -> 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢你嗷
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 03:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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