Ich habe ein Array von Strings in Heaps Funktion eingefügt. Obwohl der function generate()
den Ausgang console.log(permut);
ordnungsgemäß druckt, gibt er keine Daten zurück.Meine Funktion gibt nichts zurück
Version 1 mit return arr
var arrStr = ['a', 'a', 'b'];
var generated = generate(arrStr, arrStr.length);
console.log(g2);
function generate(arr, n) {
if (n === 1) {
console.log(arr);
return arr;
} else {
for (var i = 0; i < n; i++) {
generate(arr, n - 1);
if (n % 2 === 0) {
swap(i, n-1, arr);
} else {
swap(0, n-1, arr);
}
}
}
}
function swap(a, b, ar) {
var temp = ar[b];
ar[b] = ar[a];
ar[a] = temp;
}
Version 2 mit permut = permut.concat(arr);
var arrStr = ['a', 'a', 'b'];
var generated = [];
generate(arrStr, arrStr.length, generated);
console.log(generated);
function generate(arr, n, permut) {
if (n === 1) {
permut = permut.concat(arr);
//console.log(permut);
} else {
for (var i = 0; i < n; i++) {
generate(arr, n - 1, permut);
if (n % 2 === 0) {
swap(i, n-1, arr);
} else {
swap(0, n-1, arr);
}
}
}
}
function swap(a, b, ar) {
var temp = ar[b];
ar[b] = ar[a];
ar[a] = temp;
}
Version 1 Rückkehr für variable generated
und Version 2 gibt ein leeres Array undefiniert.
Ich habe versucht, eine Test-String 'asd' zurückzugeben, aber immer noch nichts bekommen.
Sie rufen die Funktion rekursiv, aber was tun Sie mit dem Ergebnis des rekursiven Aufrufs ? Wo im "else" Pfad gibst du eigentlich irgendwas zurück? –
Die Funktion funktioniert ordnungsgemäß. Im 'else'-Pfad wird das 'n' reduziert, bis es 'n === 1' ist, wo die problematische Rückkehr ausgeführt wird. – AchiPapakon
Im Code, den Sie zeigen, haben Sie 'n! == 1' (d. H. Im' else'-Teil) keine 'return'-Anweisung. I.e. Die Funktion gibt nichts zurück. Wenn Sie einen Wert zurückgeben wollen, müssen Sie tatsächlich die Anweisung 'return' verwenden. 'if ... else' ist binär, indem * entweder * etwas tut (wenn die Bedingung wahr ist) oder * etwas anderes *. In Ihrer Funktion wird der Teil * etwas anderes * beim ersten Aufruf ausgeführt und gibt nichts zurück. Ich schlage vor, Sie durchlaufen den Code in einem Debugger. –