请找出代码中的错误。我不知道如何通过删除参数来进行递归。当我删除参数时,代码开始正常工作。
代码片段
let number = document.getElementById("inputN").value;
function result2(number) {
if (number == 1)
return 0;
if (number == 2)
return 1;
let answer;
answer = (number - 1) * (result2(number - 1) + result2(number - 2));
return answer
document.getElementById("result").innerHTML = "Result: " + result2(number);
}
<label for="inputN">Enter the value of n:</label>
<input type="number" id="inputN" min="1" step="1" value="1">
<button onclick="result2(number)">Calculate</button>
<p id="result"></p>
这里有几个重要的问题:
return
语句,因此它永远无法执行。number
的值,且仅定义一次。该值是1
。您always使用1
调用该函数,因此它always立即返回。您可以通过将您的关注点分成两个函数来纠正这两个问题。一个读取输入值并写入输出值,并调用另一个执行计算(递归)的函数。例如:
function getResult() {
let number = document.getElementById("inputN").value;
document.getElementById("result").innerHTML = "Result: " + recurse(number);
}
function recurse(val) {
if (val == 1)
return 0;
if (val == 2)
return 1;
return (val - 1) * (recurse(val - 1) + recurse(val - 2))
}
<label for="inputN">Enter the value of n:</label>
<input type="number" id="inputN" min="1" step="1" value="1">
<button onclick="getResult()">Calculate</button>
<p id="result"></p>
注意
recurse
函数only如何执行计算并返回结果。它不关心值从哪里来,也不关心结果如何处理。
另一个函数
getResult
是由 UI 调用的。该函数读取输入值,调用计算并显示结果。