2017-02-07 5 views
0

Wie der Titel schon sagt, habe ich versucht, ein JavaScript-Problem rekursiv zu lösen. Eine Übung für meine Internet-Programmierklasse bestand darin, jede Zeichenfolge, die in der Funktion eingegeben wurde, umzukehren, und ich sah dies als eine gute Gelegenheit, dies mit Rekursion zu lösen. Mein Code:Maximale Call-Stack-Größe überschritten mit Rekursion

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

Ihre Rekursion keinen Basisfall. – Bergi

+0

Was ist die Endbedingung? –

+0

Können Sie kommentieren, was jede Zeile * tun soll und wie Ihr rekursiver Algorithmus funktioniert? Vielleicht demonstrieren Sie die Schritte, die für eine Beispielzeichenfolge ausgeführt werden sollten. – Bergi

Antwort

1

Das größte Problem ist, dass Ihre Funktion nicht über ein Ende (Basis) Fall . Es muss einen Weg finden, zu erkennen, wann es aufhören soll oder es wird für immer rekrutieren.

Das zweite Problem ist, dass Sie nicht wirklich rekursiv denken. Du machst einige Änderungen an der Zeichenkette, aber dann rufst du einfach reverseStr() erneut auf der modifizierten Zeichenkette an, die den Prozess gerade noch einmal beginnen wird.

Das folgende ähnelt nicht wirklich Ihrem Versuch (Ich weiß nicht, wie Sie Ihren Versuch retten), aber es ist eine einfache Möglichkeit, den umgekehrten String-Algorithmus rekursiv zu implementieren.

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

Danke! Ich habe den Code zu dem, was ich brauchte, geborgen, aber Ihre Antwort hat mir sehr geholfen, obwohl der wirkliche Fehler ein id10t war – Allen

0

Try this, wird dies durch Rekursion :)

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

getan
+0

Dies gibt ein Array mit den Zeichen der Zeichenfolge in umgekehrter Reihenfolge zurück. Sie sollten es wieder zu einer Schnur zusammenfügen. – JLRishe

+1

... und es ist ein globales, statisches Array. Dieser Code funktioniert höchstens einmal. – Bergi

Verwandte Themen