你好我有一个数组"你好"和一个空字符串""在里面。问题是我希望能够在数组中打印5次hello字符串,但是我遇到了无限循环。我设置了随机函数和一个计数器,因为我不总是想知道我会得到什么样的参数但结果应该是相同的:打印5次"你好"。
这是我的代码:
var a = ["hello", ""];
var randomValue = a[Math.floor(a.length * Math.random())];
function toresult(param){
let counter= 1;
if(param.length >=3 && counter <= 5){
console.log(param)
counter +=1
//If I place the function here I would run into the infinite loop: toresult(randomValue)
} else{
console.log("empty string PRINTED")
}
}
toresult(randomValue)
&#13;
答案 0 :(得分:2)
无限循环的发生是因为您没有提供退出子句。现在,每次调用函数时都重新定义计数器变量。这是您需要解决的部分。如果未将其传递给函数https://jsfiddle.net/rfbhk7de/,则可以通过初始化来解决此问题。
var a = ["hello", ""];
var counter = 1;
var randomValue = a[Math.floor(a.length * Math.random())];
function toresult(param){
if(param.length >=3 && counter <= 5){
console.log("Yes, inside!!")
counter +=1
toresult(randomValue)
}else{
console.log("empty string PRINTED")
}
}
toresult(randomValue)
另一种选择是传递计数器变量,如果没有传入,则使用计数器的默认值。
var a = ["hello", ""];
var randomValue = a[Math.floor(a.length * Math.random())];
function toresult(param, counter){
counter = typeof(counter) !== "undefined" ? counter : 1; //fancy way of doing an if loop. Basically says if counter is defined then use the passed in counter else set to default 1
if(param.length >=3 && counter <= 5){
console.log("Yes, inside!!")
counter +=1
toresult(randomValue, counter)
}else{
console.log("empty string PRINTED")
}
}
toresult(randomValue)
第二个例子的jsfiddle:https://jsfiddle.net/yd1cxbvc/
答案 1 :(得分:0)
我不认为递归对这件事有好处。据我所知,你想随机做一些事情,但在一个fundomiser返回的情况下1.所以值得尝试做什么
var a = ["hello", ""];
var counter = 0;
do{
randomValue = a[Math.floor(a.length * Math.random())]
if(randomValue.length >=3){
console.info(randomValue);
counter++;
}else{
console.log("empty string PRINTED")
}
}while( counter < 5)
确定。尽管你已经有了答案。 这是基于递归的解决方案。
var a = ["hello", ""];
function doPrint(counter){
randomValue = a[Math.floor(a.length * Math.random())]
if(!counter) return;
if(randomValue.length >=3 && counter--){
console.info(randomValue);
}else{
console.log("empty string PRINTED")
}
doPrint(counter);
}
doPrint(5);
答案 2 :(得分:-1)
递归函数定义有一个或多个基本情况,意思是 函数产生一个简单的结果的输入(没有 重复出现)和一个或多个递归情况,意味着输入 程序重复(自称)。
你必须小心地将参数传递给相同的函数调用以作为递归的termit,如下所示:
var a = ["hello", ""];
function toresult(count){
if(count < 1) return;
else {
a.push('hello');
return toresult(count-1);
}
}
toresult(5);
console.log(a); // ["hello", "", "hello","hello","hello","hello","hello"]