加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用于计算阶乘的C程序

发布时间:2020-12-16 10:36:30 所属栏目:百科 来源:网络整理
导读:我写了一个小函数,用于计算C中数字的阶乘 如下: int factNnumbers(int n){ if(n == 1) return 1; else return (n*factNnumbers(--n));} 我将上面显示的函数称为: factNnumbers(takeInputN()); 其中输入函数(takeInputN)定义为: int takeInputN(){ int n;
我写了一个小函数,用于计算C中数字的阶乘
如下:

int factNnumbers(int n)
{
    if(n == 1)
        return 1;
    else
        return (n*factNnumbers(--n));
}

我将上面显示的函数称为:

factNnumbers(takeInputN());

其中输入函数(takeInputN)定义为:

int takeInputN()
{   
    int n;
    printf("nnHow many numbers ?? n ");
    scanf("%d",&n);
    return n;
}

如果我在我的阶乘代码中更改一行,如下所示,我的程序运行完美.否则使用上面的代码打印数字输入-1的阶乘(例如,如果数字输入为5,则打印阶乘4).为什么会这样?

int factNnumbers(int n)
{
    if(n != 1)
        return (n * factNnumbers(--n));
}

解决方法

问题是你在同一个表达式中读取和修改n:

n * factNumbers(--n)

对*和-n子表达式的n参数的评估是未排序的,这为您的代码提供了未定义的行为.

最简单的解决方案(以及IMO,更具表现力),就是说n – 1你的意思是:

n * factNumbers(n - 1)

问题底部的“改进”代码实际上更加错误.在那里,你有一个控制路径,它将返回一个未指定的值:一个明确的禁止.

注意:这个答案是在问题仍然有C标签时编写的,并使用C术语. C中的最终效果是相同的,但术语可能不同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读