鉴于 Wikipedia 对Double Factorial的讨论,任何人都可以建议我在哪里可以找到 Perl 的 bignum 版本,或者建议如何编写它?
boost
问问题
1447 次
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 回答