递归超过了最大调用堆栈大小

时间:2017-02-07 03:59:28

标签: javascript recursion

正如标题所示,我试图以递归方式解决JavaScript问题。我的互联网编程类的练习是反转在函数中输入的任何字符串,我认为这是一个用递归解决这个问题的好机会。我的代码:

function reverseStr(str){
  str = Array.from(str);
  let fliparray = new Array(str.length).fill(0);
  let char = str.slice(-1);
  fliparray.push(char);
  str.pop();
  str.join("");
  return reverseStr(str);
}
writeln(reverseStr("hello"))

2 个答案:

答案 0 :(得分:1)

最大的问题是你的功能没有结束(基础)的情况。它需要有一些方法来识别它应该什么时候停止,或者它会永远递归。

第二个问题是你似乎并没有真正地递归思考。你正在对字符串进行一些修改,但是你只需要在修改过的字符串上再次调用 public void extracredit(Picture originPic) { Picture [] picture = new Picture[9]; boolean [] checkFilled = new boolean[9]; int w = originPic.getWidth(); int h = originPic.getHeight(); Pixel pixels; for ( int i = 0; i < picture.length; i++) { int xIndex = i % 3; for ( int x = w/3 * xIndex; x < w/3 * (xIndex + 1); x++) { for ( int y = h/3 * xIndex; y < h/3 * (xIndex + 1); y++) { pixels = origin.getPixel(x,y); } } } } ,这只会重新开始这个过程。

以下内容与您的尝试非常相似(我不知道如何挽救您的尝试),但这是一种递归实现反向字符串算法的简单方法。

&#13;
&#13;
reverseStr()
&#13;
&#13;
&#13;

答案 1 :(得分:0)

试试这个,这是通过递归来完成的。

let fliparray = new Array();

function reverseStr(str) {
  str = Array.from(str);
  // let fliparray = new Array(str.length).fill(0);
  let char = str.slice(-1);
  fliparray.push(char[0]);
  str.pop();
  str.join("");
  if (str.length > 0) {
    return reverseStr(str);
  } else {
    return fliparray;
  }
}
console.log(reverseStr("hello"))