Pracuję nad problemem Rosalind Mortal Fibonacci Rabbits, a strona internetowa mówi mi, że moja odpowiedź jest błędna, kiedy używam algorytmu napisanego JavaScript. Kiedy używam tego samego algorytmu w Pythonie, otrzymuję inną (i poprawną) odpowiedź.Javascript daje inną odpowiedź na ten sam algorytm w Pythonie
Ta niespójność występuje tylko wtedy, gdy wynik staje się duży. Na przykład fibd(90, 19)
zwraca 2870048561233730600
w JavaScript, ale w Pythonie otrzymuję 2870048561233731259
.
Czy jest coś na temat liczb w JavaScript, które dają mi inną odpowiedź lub czy popełniam subtelny błąd w moim kodzie JavaScript?
Rozwiązanie JavaScript:
function fibd(n, m) {
// Create an array of length m and set all elements to 0
var rp = new Array(m);
rp = rp.map(function(e) { return 0; });
rp[0] = 1;
for (var i = 1; i < n; i++) {
// prepend the sum of all elements from 1 to the end of the array
rp.splice(0, 0, rp.reduce(function (e, s) { return s + e; }) - rp[0]);
// Remove the final element
rp.pop();
}
// Sum up all the elements
return rp.reduce(function (e, s) { return s + e; });
}
Python rozwiązanie:
def fibd(n, m):
# Create an array of length m and set all elements to 0
rp = [0] * m
rp[0] = 1
for i in range(n-1):
# The sum of all elements from 1 the end and dropping the final element
rp = [sum(rp[1:])] + rp[:-1]
return sum(rp)
Czy możesz podać jakiś przykład? Uruchomiłem twój kod i daje ten sam wynik dla wejścia (10,10). Jednak widzę literówkę "rp.splice (0, 0, rp.reduce (funkcja (e, s) {return s + e;}) - rP [0]);". Czy to możliwe? Jeśli nie, czy istnieje punkt rozbieżności? –
Dobra uwaga. Dodałem przykład. Zdarza się to na większych wejściach. Dobry połów na literówkę. Dzięki, ale to nie problem. To tylko ja próbowałem uczynić nazwy zmiennych tak samo, a ja po prostu przegapiłem jedną zmienną do aktualizacji. Literówka jest teraz naprawiona – Cristian