2017-02-07 2 views
0

Как следует из названия, я пытался рекурсивно решить проблему 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")) 
+3

Ваш рекурсии не имеет базовый случай. – Bergi

+0

что такое конечное условие? –

+0

Можете ли вы прокомментировать, что каждая строка * предполагается * делать, и как работает ваш рекурсивный алгоритм? Возможно, продемонстрируйте шаги, которые следует предпринять в примерной строке. – Bergi

ответ

1

Самая большая проблема в том, что функция не имеет конца (базовый) случай , Он должен иметь какой-то способ узнать, когда он должен остановиться, или он будет рекурсивно навсегда.

Вторая проблема заключается в том, что вы на самом деле не думаете рекурсивно. Вы вносите некоторые изменения в строку, но затем вы просто вызываете reverseStr() снова и снова в измененной строке, которая просто начнет процесс снова и снова.

Не похоже на вашу попытку (я не знаю, как спасти вашу попытку), но это простой способ рекурсивно реализовать алгоритм обратной строки.

function reverseStr(str) { 
 
    // string is 0 or 1 characters. nothing to reverse 
 
    if (str.length <= 1) { 
 
    return str; 
 
    } 
 

 
    // return the first character appended to the end of the reverse of 
 
    // the portion after the first character 
 
    return reverseStr(str.substring(1)) + str.charAt(0); 
 
} 
 

 
console.log(reverseStr("Hello Everybody!"));

+0

Спасибо! Я избавил код от того, что мне нужно, но ваш ответ очень помог, хотя реальная ошибка была id10t – Allen

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"))

+0

Возвращает массив с символами строки в обратном порядке. Вы должны положить его обратно в строку. – JLRishe

+1

... и это глобальный статический массив. Этот код работает не один раз. – Bergi

Смежные вопросы