Olhando para o seu código Java, noto que você está usando int
para os números de Fibonacci.
Por outro lado, o Python está usando precisão arbitrária .
Observe também que os números de Fibonacci não cabem em uma variável int
para n > 46
!
Portanto, o código Java nem calcula os números de Fibonacci para n > 46
.
Você deve alterar o int
para algum tipo de dados maior (um de precisão arbitrária, talvez) antes de fazer a comparação.
Conclusão, Java roda muito mais rápido porque está calculando com ints (um tipo de dados de tamanho fixo), enquanto o Python está usando mais e mais RAM para acumular para os números cada vez maiores (que eventualmente param de se encaixar em 32 bits). inteiro).
Tente isto:
#!/usr/bin/python
from time import time
def int32(x):
x &= 0xffffffff
if x > 0x7fffffff:
return - ( ~(x - 1) & 0xffffffff )
else:
return x
def fibo(n):
a,b,i=0,1,0
while i<n:
t = a
a = b
b = int32(b + t)
i+=1
if __name__ == "__main__":
s=time()
fibo(1000000)
print round((time()-s)*1000,0),"ms"
para ver aproximadamente quanto tempo levaria se o Python usasse ints.