Javascript基本递归输出返回未定义的答案



我正在尝试制作一个程序,该程序从用户那里获取"基数"和"指数",并根据需要为任意数量的指数输出"基数*基数*基数*基数"。 即 2^3 输出 "2*2*2"。 但是,我目前得到"未定义*未定义*未定义*未定义...." 我的简单错误在哪里?

我猜这是这个函数的小问题:

function display(base, expo)
{
if (expo == 1)
{
document.getElementById("outputfield").value = document.getElementById("outputfield").value + base;
}
else
{
document.getElementById("outputfield").value = document.getElementById("outputfield").value + base + "*";
display(base, expo--)
}
}

这是整个代码:

<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<script type = "text/javascript">
var base = document.getElementById("base").value;
var expo = document.getElementById("expo").value;
function display(base, expo)
{
if (expo == 1)
{
document.getElementById("outputfield").value = document.getElementById("outputfield").value + base;
}
else
{
document.getElementById("outputfield").value = document.getElementById("outputfield").value + base + "*";
display(base, expo--)
}
}
</script>
</head>
<body>
<form action="#">
<p><label>Please enter a Base Number: 
<input id = "base" type="number"><br>
and an Exponent:
<input id = "expo" type ="number" ><br>
<button id="calculate" onclick= "display()">Calculate</button>
</label>
</p>
<p>
<output id="outputfield" type = "text"></output>
</p>
</form>
</body>
</html>

你可以像这样定义显示函数

function display (base, expo) {
return expo === 1 ? base.toString() : base.toString() + "*" + display(base, expo - 1);
}

并像这样使用它

document.getElementById("outputfield").value = display(base, expo);

当你第一次调用函数时display你需要将输入值作为参数传递,那么我更喜欢使用预览函数来获取输入值,在其中你可以像下面这样调用递归函数:

var base = document.getElementById("base");
var expo = document.getElementById("expo");
var output = document.getElementById("outputfield");
function resolve() {
output.innerHTML = ""
output.innerHTML = display(base.value, expo.value)
}
function display(base, expo) {
return parseInt(expo) === 1 ? base : `${base}*${display(base, --expo)}`
}
<form action="#">
<p><label>Please enter a Base Number: 
<input id ="base" type="number"><br>
and an Exponent:
<input id ="expo" type ="number"><br>
<button id="calculate" type="button" onclick= "resolve()">Calculate</button>
</label>
</p>
<p>
<output id="outputfield" type="text"></output>
</p>
</form>

声明函数中的"基本"和"输入"变量对我有用,您需要在每次函数调用时重新分配"expo"输入字段的当前值。

function display(){
var base = document.getElementById("base").value;
var expo = document.getElementById("expo").value;
if (expo == 1){
document.getElementById("outputfield").value = document.getElementById("outputfield").value + base;
}   
else{ 
document.getElementById("outputfield").value = document.getElementById("outputfield").value + base + "*";
document.getElementById("expo").value = --expo;
display(base, --expo)
}
}

最新更新