用于计算阶乘的C程序

用于计算阶乘的C程序,第1张

概述我写了一个小函数,用于计算C中数字的阶乘 如下: int factNnumbers(int n){ if(n == 1) return 1; else return (n*factNnumbers(--n));} 我将上面显示的函数称为: factNnumbers(takeInputN()); 其中输入函数(takeInputN)定义为: int 我写了一个小函数,用于计算C中数字的阶乘
如下:

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

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

factNnumbers(takeinputN());

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

int takeinputN(){       int n;    printf("\n\nHow 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中的最终效果是相同的,但术语可能不同.

总结

以上是内存溢出为你收集整理的用于计算阶乘的C程序全部内容,希望文章能够帮你解决用于计算阶乘的C程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1221434.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存