我正试图使用斐波那契数从使用输入的数字中打印出15个数字



我希望用户输入一个数字,并从该数字中输出用户输入的数字中的下15个数字。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Fibonacci</title>
<body>
<P>Please input a number between 10 and 25</P>
<input type text="text" id="integer" />
<input type="button" id="Enter" value="Enter" onclick="fibonacci_series(integer.value)"/>


<p id="output"></p>
<p id="demo"></p>
<script type="text/javascript">
var fibonacci_series = function (n) 
{
if (n ==1) 
{
var loop = [0,1];
document.getElementById("output").innerHTML = loop;
return loop;
} 
else 
{
var s = fibonacci_series(n - 1);
s.push(s[s.length - 1] + s[s.length - 2]);
document.getElementById("output").innerHTML =s;
return s;
}

};


</script>

</body>
</head>
</html>

以下是运行时的输出I输入10

0,1,1,2,3,5,8,13,21,34,55

我希望能够输入10-25之间的整数,并让它从用户输入中打印出接下来的15个斐波那契数。

非递归解决方案,因为您已经在构建值列表,并且溢出调用堆栈的风险较小

如果我正确理解问题陈述,您有兴趣打印接下来的15个fib数字,这意味着当您输入10时,您希望从第10个fib编号打印到第25个fib号码

var fibonacci_series = function (n) 
{
n = parseInt(n);
ln = n + 15;
s = [0 , 1];
var i = 1;
while (i < ln){
s.push(s[s.length - 2] + s[s.length - 1]);
++i;
}
document.getElementById("output").innerHTML = s.slice(n);
return s;
};

鉴于您在下面的评论,这是微不足道的

var fibonacci_series = function (n) 
{
n = parseInt(n);
s = [0 , n];
var i = 0;
while (i < 15){
s.push(s[s.length - 2] + s[s.length - 1]);
++i;
}
document.getElementById("output").innerHTML = s.slice(n);
return s;
};

var btn = document.getElementById('btn');
btn.addEventListener('click', () => console.log(fibonacci_series(10)));
var fibonacci_series = function (n, c = 0) {
if (c == 0) {
n += 15
}
if (n ==1) 
{
var loop = [0,1];
return loop;
} else {
var s = fibonacci_series(n - 1, c + 1);
s.push(s[s.length - 1] + s[s.length - 2]);
return s;
}

};
<button id="btn">Click Me</button>

c变量对调用堆栈进行计数,因此当它第一次调用函数时,用户给定的范围将增加15(我相信这就是您想要的)。

最新更新