
如下:
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程序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)