问题标签 [factorial]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
529 浏览

java - 动态 Java 整数/长溢出检查与性能

这是一个相当理论化的问题,因此尽管该语言专门是 Java,但任何通用解决方案都足够了。

假设我想写一个微不足道的阶乘函数:

但是现在,我还想检查阶乘是否溢出(而不是简单地硬编码 MAX_FACTORIAL_PARAMETER 或类似的东西)。通常,在乘法过程中检查溢出就像检查原始输入的结果一样简单,但在这种情况下,由于溢出可能发生在任何时候,因此在每个循环中执行更多的除法和比较会相当昂贵。

那么问题是双重的——有没有办法解决溢出的阶乘问题,而不需要在每一步检查乘法溢出或硬编码最大允许参数?

一般来说,我应该如何处理涉及迭代/递归的多个阶段的问题,这些阶段可能会在每个阶段静默失败,而不会通过在每个阶段引入昂贵的检查来影响性能?

0 投票
8 回答
35610 浏览

haskell - Haskell 内置阶乘函数

我知道这听起来像是一个愚蠢的问题,但它是:Haskell 中有内置的阶乘吗?

谷歌给了我关于 Haskell 的教程,解释了我如何自己实现它,我在 Hoogle 上找不到任何东西。我不想每次需要时都重写它。

我可以product [1..n]用作替代品,但是否有真正的Int -> Int阶乘内置函数?

0 投票
7 回答
2635 浏览

algorithm - 大数的阶乘总和

我想计算 N! 的数字总和。

我想对非常大的 N 值执行此操作,例如 N(1500)。我没有使用 .NET 4.0。我不能使用 BigInteger 类来解决这个问题。

这可以通过其他算法或程序来解决吗?请帮忙。

我想做这样的事情计算任意大数的阶乘,显示所有数字,但在 C# 中。但是我无法解决。

0 投票
3 回答
1395 浏览

c++ - 计算 lg(N!):有人有更好的递归方法吗?

我认为帖子的标题解决了我的问题。但重申一下,我想知道是否有人有更好的方法来解决这个问题。

根据人们的反应,我应该澄清一下,这是书上的问题,书上说要递归地做。我正在练习编程问题,并尝试从其他人那里获得反馈,以便在我努力成为更好的程序员的过程中发现自己的错误。

0 投票
2 回答
3935 浏览

python - 在 python 中对阶乘使用感叹号 (!) 语法

可以使用数学中的语法定义工作阶乘函数/运算符吗?即使用!符号。

我想不出现有符号的任何用例可能会模棱两可

  • ipython!shell_escape总是在一行的开头有爆炸声
  • 像往常一样,因为其他解释0!=1会是或类似的错误)Truefactorial(0) = 1SyntaxError: can't assign to literal
0 投票
2 回答
1326 浏览

string - 区分大小写字符串的组合计数

我记得,组合数等于 n!

但是,例如,我有字符串“abc”。我想获得具有不同注册表的所有组合:aBc 或 ABc 等

所以,abc 是 3 个字符。3!= 1 * 2 * 3 = 6。但是,如果我尝试手动完成这项工作 - 我会得到 8 种变化:

1 abc 2 abc 3 abc 4 abc 5 abc 6 abc 7 abc 8 abc

所以,看起来,答案是 2^3 = 8,但 2 是什么?3 - 是字符串中的注册表数。什么是 2?注册表变体的数量?

0 投票
2 回答
2857 浏览

groovy - 使用 Groovy 进行尾递归

我编写了 3 个阶乘算法:

  1. 我预计会因堆栈溢出而失败。没问题。
  2. 我尝试了尾递归调用,并将先前的算法从递归转换为迭代。它不起作用,但我不明白为什么。
  3. 我使用trampoline()方法,它按我的预期工作得很好。
0 投票
4 回答
1618 浏览

python - 在带有 reduce() 的 lambda 函数中使用 math.factorial

我正在尝试编写一个函数来计算字符串的唯一排列数。例如aaa会返回1并且abc会返回6
我正在编写这样的方法:

(伪代码:)

其中 A,B,C 是每个唯一字符的出现次数。例如,字符串'aaa'3! / 3! = 1,而字符串'abc'3! / (1! * 1! * 1!) = 6

到目前为止,我的代码是这样的:

一切正常,除非我尝试传递一个只有一个唯一字符的字符串,即aaa- 我得到错误的答案:

现在,我可以说问题在于在长度为 1 的列表上运行带有阶乘的 lambda 函数。不过,我不知道为什么。大多数其他 lambda 函数适用于长度为 1 的列表,即使它需要两个元素:

这个没有:

有什么我应该做的不同的事情吗?我知道我可以用许多不同的方式重写函数来规避这个(例如不使用lambda),但我正在寻找为什么这特别不起作用。

0 投票
1 回答
1687 浏览

java - 将大数转换为字符串格式以进行比较

我正在尝试比较大到连 BigIntegers 都无法处理的数字。我的解决方案是将数字转换为字符串并对其使用字符串比较。

这行得通吗?我不太确定如何实现这样的东西。我只是试图对一个算法进行单元测试,以为我被吸引到的项目 Euler 程序产生 1000 的阶乘。

0 投票
2 回答
751 浏览

math - 逆因子的增长

考虑逆阶乘函数 f(n) = k 其中 k! 是最大的阶乘 <= n。我被告知逆阶乘函数是 O(log n / log log n)。这是真的吗?或者它只是对渐近增长的一个非常好的近似?我尝试的方法都给出了非常接近 log(n)/log log(n) 的东西(分母中的一个小因素或一个小项),但不完全是。