我想从斐波那契数列中获得一个随机数:
0、1、1、2、3、5、8、13、21、34、55、89、144、233、377、610、987、1597、2584、4181、6765、10946、17711、28657 ,46368,75025,121393,196418,317811,...
这是我的代码:
var number = Math.floor(Math.random() * 100000);
var series_element = -1;
if (number < 1) {
series_element = 1;
} else {
if (number < 2) {
series_element = 2;
} else {
if (number < 3) {
series_element = 3;
} else {
if (number < 5) {
series_element = 5;
} else {
if (number < 8) {
series_element = 8;
} else {
if (number < 13) {
series_element = 13;
} else {
if (number < 21) {
series_element = 21;
}
////// series continues to 317811
}
}
}
}
}
}
alert(series_element);
但是我从来没有得到series_element
的值小于100。它总是向我显示更高的值。
答案 0 :(得分:2)
我认为您的意思是您没有从Math.random()
函数获得小于100的随机数。因此,您不会使变量series_element
小于等于11(斐波纳契数列的前11个项:0 1 1 2 3 5 8 13 21 34 55 89)。
实际上,这是一个概率问题。
100/1000000 = 0.0001
如果您继续执行它,则有时会得到小于100的值,大约是10000次的1。
您的代码没有错,但是可以改进它,因此您不必放置太多ifs。
答案 1 :(得分:1)
首先,让我们定义一个函数来计算斐波那契数。有关操作方法的详细信息,请参见:https://medium.com/developers-writing/fibonacci-sequence-algorithm-in-javascript-b253dc7e320e
function fibonacci(num){
var a = 1, b = 0, temp;
while (num >= 0){
temp = a;
a = a + b;
b = temp;
num--;
}
return b;
}
要获取随机斐波那契数,您可以使用随机数调用此函数。
var number = Math.floor(Math.random()*100);
var result = fibonacci(number);
我不建议过100,因为您的计算机可能需要太多时间来处理结果...
答案 2 :(得分:0)
您正在使用结构不良的代码来生成fabonacci系列。尝试以下方法,您将获得低于100和1000的价值
其中N
是从1
到N
的斐波那契数的位置,而X
是实际数。
var n = function getRandomNum() {
return Math.floor(Math.random()*100) +1;
}
var result = [];
result[0] = 1;
result[1] = 1;
function fib(x) {
var ix, ixLen;
for(ix = 0, ixLen = x; ix < ixLen; ix++){
if(!result[ix]){
result[ix] = result[ix-2] + result[ix-1];
}
}
console.log('n:', x, ' result: ', result[ix-1]);
return result[ix-1];
}
console.log(fib(n()));