2

鉴于 Wikipedia 对Double Factorial的讨论,任何人都可以建议我在哪里可以找到 Perl 的 bignum 版本,或者建议如何编写它?

4

4 回答 4

3

Perl 将处理您的 C 编译器可以处理的任何内容,对于任何更大的内容,您应该使用Math::BigInt

我建议您阅读perlnumber

双阶乘的定义(在 perl 高尔夫中):

sub f{$_[0]&&$_[0]>=2?$_[0]*f($_[0]-2):1}
于 2009-01-06T12:57:56.610 回答
2

这里有很多实现快速阶乘函数的替代方法。穷人算法对你来说可能是一个不错的选择,因为它不使用大整数库,并且可以很容易地用任何计算机语言实现,甚至可以快速达到 10000!。

翻译成 Perl 留给 OP 练习 :-)

于 2009-01-06T21:48:02.907 回答
1

Perl 5.8 和更高版本带有bignum包。只需将它用于您的脚本,剩下的就交给它了:

use bignum;

当我在“Profiling”一章中使用阶乘时,我在Mastering Perl中谈到了这一点。

于 2009-01-06T22:09:14.563 回答
1

尽管 dsm 的答案是准确的,但在 Perl 中计算阶乘的真正方法,无论您是否使用 dsm 的算法(是否打高尔夫球)都是记忆。如果您要以任何频率调用它,您将需要记住任何递归数学函数。

use Memoize;
memoize( 'fact2' );

sub fact2 {$_[0]&&$_[0]>=2?$_[0]*fact2($_[0]-2):1}
于 2009-01-08T05:33:23.027 回答