【发布时间】:2009-01-06 12:45:11
【问题描述】:
鉴于 Wikipedia 对 Double Factorials 的讨论,谁能建议我在哪里可以找到 Perl 的 bignum 版本,或者建议如何编写它?
【问题讨论】:
鉴于 Wikipedia 对 Double Factorials 的讨论,谁能建议我在哪里可以找到 Perl 的 bignum 版本,或者建议如何编写它?
【问题讨论】:
Perl 将处理您的 C 编译器可以处理的任何内容,对于更大的内容,您应该使用 Math::BigInt。
我建议你阅读perlnumber。
双阶乘的定义(在 perl golf 中):
sub f{$_[0]&&$_[0]>=2?$_[0]*f($_[0]-2):1}
【讨论】:
bfac,但这是一个不同的野兽。
这里有很多实现Fast Factorial Functions 的替代方法。穷人算法对你来说可能是一个不错的选择,因为它不使用大整数库,并且可以很容易地用任何计算机语言实现,甚至可以快速达到 10000!。
翻译成 Perl 留给 OP 练习 :-)
【讨论】:
Perl 5.8 及更高版本附带bignum 包。只需将它用于您的脚本,剩下的就交给它了:
use bignum;
当我在“Profiling”一章中使用阶乘时,我在Mastering Perl 中谈到了这一点。
【讨论】:
虽然 dsm 的答案是准确的,但在 Perl 中计算阶乘的真正方法,无论您是否使用 dsm 的算法(是否打高尔夫球)都是 memoize 它.如果要以任何频率调用它,则需要记住任何递归数学函数。
use Memoize;
memoize( 'fact2' );
sub fact2 {$_[0]&&$_[0]>=2?$_[0]*fact2($_[0]-2):1}
【讨论】: