Angesichts der Diskussion in Wikipedia über Doppelt faktoriell s, kann jemand vorschlagen, wo ich eine bignum Version von diesem für Perl finden könnte, oder vorschlagen, wie es geschrieben werden könnte?
Antworten
Zu viele Anzeigen?Perl kann mit allem umgehen, was Ihr C-Compiler kann, für alles, was größer ist, sollten Sie Math::BigInt .
Ich empfehle Ihnen zu lesen perlnumber .
Eine Definition für die doppelte Fakultät (in Perl Golf):
sub f{$_[0]&&$_[0]>=2?$_[0]*f($_[0]-2):1}
Hier gibt es viele alternative Ansätze zur Umsetzung Schnelle faktorielle Funktionen . Der Poor Man's Algorithmus könnte eine gute Wahl für Sie sein, da er keine Big-Integer-Bibliothek verwendet und leicht in jeder Computersprache implementiert werden kann und sogar bis zu 10000! schnell ist.
Die Übersetzung in Perl bleibt als Übung für den OP :-)
Perl 5.8 und spätere Versionen werden mit dem Bignum Paket. Verwenden Sie es einfach Ihr Skript und es kümmert sich um den Rest:
use bignum;
Ich spreche darüber ein wenig in Perl beherrschen wenn ich den Faktor im Kapitel "Profiling" verwende.
Die Antwort von dsm ist zwar richtig, aber die real Die Berechnung von Faktoren in Perl, unabhängig davon, ob Sie den Algorithmus von dsm (mit oder ohne Golf) verwenden, ist wie folgt speichern es. Wenn Sie sie häufig aufrufen, sollten Sie jede rekursive mathematische Funktion auswendig lernen.
use Memoize;
memoize( 'fact2' );
sub fact2 {$_[0]&&$_[0]>=2?$_[0]*fact2($_[0]-2):1}