如何在javascript中以参数作为输入进行递归

问题描述 投票:0回答:1

请找出代码中的错误。我不知道如何通过删除参数来进行递归。当我删除参数时,代码开始正常工作。

代码片段

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>

javascript html recursion
1个回答
0
投票

这里有几个重要的问题:

  1. 产生输出的代码行是after一个
    return
    语句,因此它永远无法执行。
  2. 您可以在页面加载时定义一次
    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 调用的。该函数读取输入值,调用计算并显示结果。

© www.soinside.com 2019 - 2024. All rights reserved.