问题标签 [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.
java - 动态 Java 整数/长溢出检查与性能
这是一个相当理论化的问题,因此尽管该语言专门是 Java,但任何通用解决方案都足够了。
假设我想写一个微不足道的阶乘函数:
但是现在,我还想检查阶乘是否溢出(而不是简单地硬编码 MAX_FACTORIAL_PARAMETER 或类似的东西)。通常,在乘法过程中检查溢出就像检查原始输入的结果一样简单,但在这种情况下,由于溢出可能发生在任何时候,因此在每个循环中执行更多的除法和比较会相当昂贵。
那么问题是双重的——有没有办法解决溢出的阶乘问题,而不需要在每一步检查乘法溢出或硬编码最大允许参数?
一般来说,我应该如何处理涉及迭代/递归的多个阶段的问题,这些阶段可能会在每个阶段静默失败,而不会通过在每个阶段引入昂贵的检查来影响性能?
haskell - Haskell 内置阶乘函数
我知道这听起来像是一个愚蠢的问题,但它是:Haskell 中有内置的阶乘吗?
谷歌给了我关于 Haskell 的教程,解释了我如何自己实现它,我在 Hoogle 上找不到任何东西。我不想每次需要时都重写它。
我可以product [1..n]
用作替代品,但是否有真正的Int -> Int
阶乘内置函数?
algorithm - 大数的阶乘总和
我想计算 N! 的数字总和。
我想对非常大的 N 值执行此操作,例如 N(1500)。我没有使用 .NET 4.0。我不能使用 BigInteger 类来解决这个问题。
这可以通过其他算法或程序来解决吗?请帮忙。
我想做这样的事情计算任意大数的阶乘,显示所有数字,但在 C# 中。但是我无法解决。
c++ - 计算 lg(N!):有人有更好的递归方法吗?
我认为帖子的标题解决了我的问题。但重申一下,我想知道是否有人有更好的方法来解决这个问题。
根据人们的反应,我应该澄清一下,这是书上的问题,书上说要递归地做。我正在练习编程问题,并尝试从其他人那里获得反馈,以便在我努力成为更好的程序员的过程中发现自己的错误。
python - 在 python 中对阶乘使用感叹号 (!) 语法
可以使用数学中的语法定义工作阶乘函数/运算符吗?即使用!
符号。
我想不出现有符号的任何用例可能会模棱两可
- ipython
!shell_escape
总是在一行的开头有爆炸声 - 像往常一样,因为其他解释
0!=1
会是或类似的错误)True
factorial(0) = 1
SyntaxError: can't assign to literal
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?注册表变体的数量?
groovy - 使用 Groovy 进行尾递归
我编写了 3 个阶乘算法:
- 我预计会因堆栈溢出而失败。没问题。
- 我尝试了尾递归调用,并将先前的算法从递归转换为迭代。它不起作用,但我不明白为什么。
- 我使用
trampoline()
方法,它按我的预期工作得很好。
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
),但我正在寻找为什么这特别不起作用。
java - 将大数转换为字符串格式以进行比较
我正在尝试比较大到连 BigIntegers 都无法处理的数字。我的解决方案是将数字转换为字符串并对其使用字符串比较。
这行得通吗?我不太确定如何实现这样的东西。我只是试图对一个算法进行单元测试,以为我被吸引到的项目 Euler 程序产生 1000 的阶乘。
math - 逆因子的增长
考虑逆阶乘函数 f(n) = k 其中 k! 是最大的阶乘 <= n。我被告知逆阶乘函数是 O(log n / log log n)。这是真的吗?或者它只是对渐近增长的一个非常好的近似?我尝试的方法都给出了非常接近 log(n)/log log(n) 的东西(分母中的一个小因素或一个小项),但不完全是。