带有自定义数字的阶乘函数不起作用

factorial function with custom numbers doesn't work

本文关键字:阶乘 函数 不起作用 数字 自定义      更新时间:2023-10-16

最近,我一直在图书馆工作,处理数千位数字的大量数字。现在,我刚刚设置了乘法时,我已经从事这些事情的阶乘功能。

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一样(参见评估顺序/未定义的行为(。

因此,此代码有时可能会按照您的预期行事,但也可能完全不同。

因此,如果--inputinput的内容有副作用(我们可能会根据可能的(,则必须将您的代码重写为

input * factorial(input-one)

(input - one)不得以任何方式更改 input(必须实现,以便给出正确的结果(。