const f = new Function('',
'const recursiveFunction= (x) =>{' +
'if (x <= 0) return 0;' +
'const value=recursiveFunction(x-1);' +
'return 1 + value;' +
'};' +
'return recursiveFunction(400);'
);
const g = new Function('',
'const recursiveFunction= (x) =>{' +
'if (x <= 0) return 0;' +
'const value=recursiveFunction(x-1);' +
'return 1 + value;' +
'};' +
'return recursiveFunction(500);'
)
var stack = [1000000];
var y = 0;
while (stack.length){
let x = stack.pop();
if (x == 0){
print('Stack result for 1,000,000: ' + y);
continue;
}
y = y + 1;
stack.push(x - 1);
}
print('Recursive result for 400: ' + f());
print('Recursive result for 500: ' + g()); // Oops... "prog.js:5:0 InternalError: too much recursion"
Y29uc3QgZiA9IG5ldyBGdW5jdGlvbignJywKICAnY29uc3QgcmVjdXJzaXZlRnVuY3Rpb249ICh4KSA9PnsnICsKICAgICdpZiAoeCA8PSAwKSByZXR1cm4gMDsnICsKIAogICAgJ2NvbnN0IHZhbHVlPXJlY3Vyc2l2ZUZ1bmN0aW9uKHgtMSk7JyArCiAKICAgICdyZXR1cm4gMSArIHZhbHVlOycgKwogICd9OycgKwogICdyZXR1cm4gcmVjdXJzaXZlRnVuY3Rpb24oNDAwKTsnCik7Cgpjb25zdCBnID0gbmV3IEZ1bmN0aW9uKCcnLAogICdjb25zdCByZWN1cnNpdmVGdW5jdGlvbj0gKHgpID0+eycgKwogICAgJ2lmICh4IDw9IDApIHJldHVybiAwOycgKwogCiAgICAnY29uc3QgdmFsdWU9cmVjdXJzaXZlRnVuY3Rpb24oeC0xKTsnICsKIAogICAgJ3JldHVybiAxICsgdmFsdWU7JyArCiAgJ307JyArCiAgJ3JldHVybiByZWN1cnNpdmVGdW5jdGlvbig1MDApOycKKQoKdmFyIHN0YWNrID0gWzEwMDAwMDBdOwoKdmFyIHkgPSAwOwoKd2hpbGUgKHN0YWNrLmxlbmd0aCl7CiAgbGV0IHggPSBzdGFjay5wb3AoKTsKCiAgaWYgKHggPT0gMCl7CiAgICBwcmludCgnU3RhY2sgcmVzdWx0IGZvciAxLDAwMCwwMDA6ICcgKyB5KTsKICAgIGNvbnRpbnVlOwogIH0KCiAgeSA9IHkgKyAxOwogIHN0YWNrLnB1c2goeCAtIDEpOwp9CiAKcHJpbnQoJ1JlY3Vyc2l2ZSByZXN1bHQgZm9yIDQwMDogJyArIGYoKSk7CnByaW50KCdSZWN1cnNpdmUgcmVzdWx0IGZvciA1MDA6ICcgKyBnKCkpOyAvLyBPb3BzLi4uICJwcm9nLmpzOjU6MCBJbnRlcm5hbEVycm9yOiB0b28gbXVjaCByZWN1cnNpb24i