我正在研究 Rosalind 问题Mortal Fibonacci Rabbits,当我使用我的算法编写的 JavaScript 时,网站一直告诉我我的答案是错误的。当我在 Python 中使用相同的算法时,我得到了不同的(正确的)答案。
只有当结果变大时才会发生不一致。例如在 JavaScript 中fibd(90, 19)
返回2870048561233730600
,但在 Python 中我得到2870048561233731259
.
JavaScript 中的数字是否给了我不同的答案,或者在我的 JavaScript 代码中犯了一个微妙的错误?
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解决方案:
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)