用于计算阶乘的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中的最终效果是相同的,但术语可能不同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |