带有自定义数字的阶乘函数不起作用
factorial function with custom numbers doesn't work
最近,我一直在图书馆工作,处理数千位数字的大量数字。现在,我刚刚设置了乘法时,我已经从事这些事情的阶乘功能。
largeNum factorial(largeNum& input) {
if (input > one) return (input * factorial(--input));
else return one;
}
"一个"是一个定义的largerum,其值为"一个",带有" "符号,因为我尚未实现整数转换。
阶乘是Largonum类的朋友功能。我没有任何语法错误,它必须是逻辑的。
前缀 - 操作员已正确超载并进行了测试。
乘法和">"运算符也是如此。
- 输入5个返回24,即4!
- 输入6个返回120,即5!。等等。
也许我只是盲目盲目,因为我有点睡眠剥夺了,但我需要一些帮助。欢呼。
回答您的问题:"意外"结果,即"输入5给出4!,而不是5!",与以下代码引入的不确定行为有关:
input * factorial(--input)
请注意,C 中运算符的评估顺序主要是未定义的(例如,CPPReference(。因此,在结果乘以input
的值(同时更改(值之前,可能会评估factorial(--input)
。结合副作用,当操作改变相同(或另一个(对象的副作用时,当相同(或另一个(对象在同一表达式中使用而没有序列之间的序列点时,这通常会导致不确定的行为。就像操作n = ++i + i;
是UB一样(参见评估顺序/未定义的行为(。
因此,此代码有时可能会按照您的预期行事,但也可能完全不同。
因此,如果--input
对input
的内容有副作用(我们可能会根据可能的(,则必须将您的代码重写为
input * factorial(input-one)
(input - one)
不得以任何方式更改 input
(必须实现,以便给出正确的结果(。
相关文章:
- 在 C++ 中的数组上使用阶乘函数
- 为什么我在C++阶乘函数中出现编译错误?
- 阶乘函数只返回C++中输入的答案
- 为什么我不能在非常量表达式上使用此模板阶乘函数?
- 返回阶乘C++的递归函数
- C++ 中是否有任何内置阶乘函数?
- 为什么叮当使我的简单阶乘函数过于复杂
- 3 函数加主函数 C 程序计算和显示阶乘
- 带有自定义数字的阶乘函数不起作用
- 阶乘函数不适用于大数
- 自定义阶乘函数未按预期工作
- 递归阶乘函数在"22!"上产生不正确的结果
- 为什么这个阶乘函数返回int而不是double
- 在C++中跟踪递归阶乘函数
- 带有值的递归阶乘错误返回语句,在函数中返回 'void' [-fallowive]
- 记忆化的递归阶乘函数
- 了解如何在c++中使用阶乘函数
- 为什么阶乘递归函数比普通阶乘函数效率低
- 有数据类型问题的c++阶乘函数
- 如何在c++中实现阶乘函数并进行正确的错误处理