递归函数,直到计数器等于5无限循环

时间:2017-03-14 18:14:33

标签: javascript recursion

你好我有一个数组"你好"和一个空字符串""在里面。问题是我希望能够在数组中打印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;
&#13;
&#13;

3 个答案:

答案 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"]