ウィキペディアでのDouble Factorialの議論を考えると、Perl 用にこれの bignum バージョンをどこで見つけることができるか、またはそれがどのように記述されるかを提案できる人はいますか?
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
Fast Factorial Functionsを実装するための多くの代替アプローチがあります。貧乏人のアルゴリズムは、Big-Integer ライブラリを使用せず、任意のコンピューター言語で簡単に実装でき、最大 10000! まで高速であるため、適切な選択かもしれません。
Perl への変換は、OP の演習として残されています :-)
于 2009-01-06T21:48:02.907 に答える
1
Perl 5.8 以降にはbignumパッケージが付属しています。スクリプトを使用するだけで、残りは処理されます。
use bignum;
これについては、「プロファイリング」の章で階乗を使用するときにPerl をマスターする で少し説明します。
于 2009-01-06T22:09:14.563 に答える
1
dsm の答えは正確ですが、 dsm のアルゴリズム ( golfedかどうか) を使用するかどうかに関係なく、Perl で階乗を計算する実際の方法はメモ化することです。任意の頻度で呼び出す場合は、再帰的な数学関数をメモ化する必要があります。
use Memoize;
memoize( 'fact2' );
sub fact2 {$_[0]&&$_[0]>=2?$_[0]*fact2($_[0]-2):1}
于 2009-01-08T05:33:23.027 に答える