Para calcular nCr [es decir, n! / (r! * (n-r)!)], escriba el siguiente código.
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 salida como "-Yaya" pero,
El mismo código lógico en Python da el resultado correcto.
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))
Amablemente, hágame saber qué cambios debo hacer en el código Perl para que funcione para números más grandes (y también traté de usar bigint también, pero no funcionó)
Editar:
Gracias a todos por la respuesta.
Lo siento, me he perdido; y 1.
Creo que Bigint depende de la configuración de la máquina.
http://www.perlmonks.org/?node_id=906757
Respuestas
0 para la respuesta № 1No sé lo que hiciste, pero use bigint
funciona bien
Como dijo ikegami, el código que publicaste ni siquiera se compila, así que lo estás haciendo lo más difícil posible para ayudarte.
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);
}
salida
63850511926305130236698511142022274281262900693853331776286816221524376994750901948920974351797699894319420811933446197797592213357065053890
¿Por qué querrías ese número, de todos modos?
0 para la respuesta № 2
prueba esto creo que resolverá el 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);
}