-1

quote from: https://github.com/javascript-tutorial/zh.javascript.info/blob/master/1-js/12-generators-iterators/1-generators/01-pseudo-random-generator/solution.md

function* pseudoRandom(seed) {
  let value = seed;

  while(true) {
    value = value * 16807 % 2147483647
    yield value;
  }

};

let generator = pseudoRandom(1);

alert(generator.next().value); // 16807
alert(generator.next().value); // 282475249
alert(generator.next().value); // 1622650073

question: https://github.com/javascript-tutorial/zh.javascript.info/blob/master/1-js/12-generators-iterators/1-generators/01-pseudo-random-generator/task.md

My solution:

function* pseudoRandom(seed) {
  const value = seed * 16807 % 2147483647
  yield value
  yield* pseudoRandom(value)
};

let generator = pseudoRandom(1);

alert(generator.next().value); // 16807
alert(generator.next().value); // 282475249
alert(generator.next().value); // 1622650073

What's the difference,thanks.

dingyanhe
  • 43
  • 5
  • Recursion vs Iteration: https://medium.com/backticks-tildes/iteration-vs-recursion-c2017a483890#:~:text=The%20difference%20between%20them%20is,a%20certain%20condition%20is%20met. – tesla Aug 26 '20 at 11:37

1 Answers1

2

It depend on how long you are planning to run this program. Your loop might go forever but the recursion one will throw an error.

All the function calls you do are placed in a stack. At some point, your stack is going to be full, causing a Stackoverflow Exception.

The stack limit depends on the browser, but pass that limit, the Recursion one will stop in an error while the loop will continue.

Nicolas
  • 8,077
  • 4
  • 21
  • 51