我正在努力将功能的结果打印到屏幕上。
该功能有效,它根据整数计算fibonaaci序列。
但我不知道如何使用innerHTML显示它。
以下是代码:
var number = document.getElementsByClassName('enter')[0].value;
var a = parseInt(number);
function fib(a) {
if (a <= 1) return 1;
return fib(a - 1) + fib(a - 2);
var print = document.getElementsByClassName('sequence').innerHTML = a;
}
<form action="" class="form">
<input type="number" min="1" max="10" placeholder="enter a number (max of 50)" class="enter">
<input onclick="fib()" type="submit">
</form>
<p class="sequence"></p>
答案 0 :(得分:1)
算法的问题在于您使用递归来查找序列。这是一项非常昂贵的操作,因为它执行许多操作。使用它,很容易超过maximum call size
。
更好的选择是创建一个带数字的数组,并通过只取最后一个和倒数第二个数字来填充数组。使用这种方法,您可以输入最多1,000的数字,并立即获得结果。在这里尝试一下。
var sequence = document.getElementById("sequence");
var btn = document.getElementById("getSequence");
function fib(a) {
var numbers = [1,1];
var num = +(document.getElementById("num").value);
if (num) {
while (numbers.length < num) {
numbers[numbers.length] = numbers[numbers.length - 1] + numbers[numbers.length - 2];
}
sequence.innerHTML = numbers.join(',');
}
else {
sequence.innerHTML = "Select a number first ";
}
}
btn.addEventListener("click", function() {
var input = +(document.getElementById("num").value);
fib(input);
});
<input type="number" id="num" min="1" max="1000" />
<button id="getSequence">Get Sequence</button>
<p id="sequence"></p>
答案 1 :(得分:0)
首先,你在fib(Number)
函数中缺少一个近似括号;这可能是一个错字。您还缺少类定义中HTML的最后一行的结束引号。
错误发生在var print...
行。 document.getElementsByClassName(class)
返回包含类class
的所有HTML对象的数组。因此,返回值没有属性innerHTML
,因此您应该在那里收到错误。
有两个简单的解决方案。
1 - 从数组中获取元素
document.getElementsByClassName('sequence')[0].innerHTML = a;
2 - 为<p>
元素
<p class="sequence" id="out"></p>
=================================================================================
document.getElementById("out").innerHTML = a;
答案 2 :(得分:0)
你最后一行很奇怪,因为你想设置innerHTML。试试这个:
document.getElementsByClassName('sequence').innerHTML = fib(a);
答案 3 :(得分:0)
是的,它不能从代码片段中编译。
很大程度上你的问题在这里:
var print = document.getElementsByClassName('sequence').innerHTML = a;
两件事:
1)您无需设置要打印的变量或更改html类。所以不确定“打印”是什么意思,但.innerHTML取决于它的使用方式是一个吸气剂或设定器。我认为您的意思是更改此变量的值以使输出流入'sequence。';
2)“id”用于单个元素,“class”用于一组元素。我猜你对前者更感兴趣。所以:
document.getElementById('sequence').innerHTML = a;
如果我理解你的问题,......应该完成你所追求的目标。
答案 4 :(得分:0)
print是一个内置函数,所以你不能设置东西(或者至少你不应该),getElementsByClassName也返回一个必须循环的数组
var p = document.getElementsByClassName('sequence');
var i;
for( i = 0 ; i < p.length ; i++ ){ p[i].innerHTML = 1234; }