2

ウィキペディアでの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

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 に答える