Para calcular nCr [isto é, n! / (r! * (n-r)!)], escreveu o código abaixo.
Código Perl:
($i,$j)=(1000,100);
print fact($i)/(fact($j)*(fact($i-$j)));
sub fact{
return 1 if $_[0]<=1;
return $_[0]*fact($_[0]-1);
}
que está dando saída como "-NaN" mas,
mesmo código lógico em python fornece o resultado correto.
Código Python:
def fact(x):
if x <= 1:
return 1
return x*f(x-1)
v,y = 1000,100
print fact(v)/(fact(y)*fact(v-y))
Por favor, deixe-me saber quais alterações eu tenho que fazer no código perl para fazê-lo funcionar com números maiores. (E também tentei usar "bigint" também, mas não funcionou)
Editar:
Obrigado a todos pela resposta.
Desculpe, eu perdi; e 1.
Eu acho que o bigint depende da configuração da máquina
http://www.perlmonks.org/?node_id=906757
Respostas:
0 para resposta № 1Eu não sei o que você fez, mas use bigint
funciona bem
Como o ikegami disse, o código que você postou nem é compilado, então você está tornando o mais difícil possível para ajudá-lo
use strict;
use warnings;
use bigint;
my ($i, $j) = (1000, 100);
no warnings "recursion";
print fact($i) / ( fact($j) * fact($i-$j) ), "n";
sub fact{
$_[0] <= 1 ? 1 : $_[0] * fact($_[0]-1);
}
saída
63850511926305130236698511142022274281262900693853331776286816221524376994750901948920974351797699894319420811933446197797592213357065053890
Por que você iria querer esse número, afinal?
0 para resposta № 2
tente isso eu acho que vai resolver o problema
use bignum;
($i,$j)=(1000,100);
print fact($i)/(fact($j)*(fact($i-$j)));
sub fact{
return 1 if $_[0]<=1;
return $_[0]*fact($_[0]-1);
}