2017-06-26 5 views
-2

Meine Hausaufgabe ist es, ob die angegebene Zahl ist ungerade oder gerade (boolescher Wert), mit rekursiven Funktionen: true für gerade und false für ungerade. Ich bin mit zwei ähnlichen Funktionen gelandet.ungerade sogar mit Rekursion

Mein Problem ist, dass eine Funktion immer true zurückgibt und andere immer false zurückgibt.

Der Code unten true für eine beliebige Anzahl

function t(n){ 
    if (n=2){ 
     return true; 
    } 
    else if (n=1){ 
     return false; 
    } 
    else{ 
     return n-t(n-2); 
    } 
} 


console.log(t(3)); 
// true 

Der Code false

für eine beliebige Anzahl gibt unten gibt
function t(n){ 
    if (n=0){ 
     return true; 
    } 
    else if (n=1){ 
     return false; 
    } 
    else{ 
     return n-t(n-2); 
    } 
} 


console.log(t(3)); 
// false 
+5

'=' ist nicht zum Vergleichen ... – Teemu

+0

Warum brauchen Sie das? –

+0

@CarlosFranco Weil sein Lehrer ihn gebeten hat, es zu schreiben, natürlich. – mpen

Antwort

1

Die Hauptprobleme im Code sind

  • Sie einen Auftrag testen, n=1. Der Vergleichsvorgang wäre n == 1.
  • Ihre Rekursion Fall macht eine ungültige Operation:

    return n-t (n-2)

n eine ganze Zahl ist; Der Rückgabewert von t ist (angeblich) Boolean. Für den einfachen Fall von n = 4, was wollen Sie zurückgeben? Sie wiederholen mit dem Anruf t(2). Dies gibt true zurück, sodass Ihr vorheriger Aufruf jetzt 4-true auswertet und diesen Wert zurückgibt. Dies ist wahrscheinlich nicht das, was Sie wollen.

Die if Bedingungen beheben. Ändern Sie den rekursiven Aufruf auf t(n-2). Wenn Sie weitere Probleme haben, versuchen Sie ein paar strategisch platzierte print Anweisungen, um den Ausführungspfad und einen oder zwei signifikante Werte zu verfolgen.

3

Der allgemeine Ansatz hierfür wäre 2 von Ihrem Wert auf jeder Rekursion abziehen Niveau.

diese Weise wird die Rekursion Basisfall so sein würde, wenn:

a) wir 0 erreichen, die Zahl ist sogar

b) erreichen wir 1, ist die Nummer ungerade.

Hier ist der Pseudo-Code:

evenOrOdd(number) { 
    if number equals 0 
    return 'even' 
    if number equals 1 
    return 'odd' 
    return evenOrOdd(number - 2); 
} 

Hinweis: dies funktioniert nur für positive Zahlen. Für eine negative Zahl würden Sie Addition statt Subtraktion durchführen.

+1

Ich wollte sagen ... das wird bomben, wenn 'Nummer' negativ ist :-) – mpen

+1

Die Idee ist, das OP in die richtige Richtung zu zeigen, nicht klar ihre HW zu lösen :) – nem035

+0

Wenn Sie mit dem Rest der Division vergleichen, lösen Sie das Problem mit der negativen Zahl –

1

Sie sollten das Gleichheitszeichen der Zuweisung in der if-Bedingung durch das Vergleichsgleichzeichen ersetzen. Und wenn Ihre Funktion einen booleschen Wert zurückgibt, können Sie die n-Variable nicht mit dem Ergebnis der Funktion subtrahieren, da es sich jeweils um eine Ganzzahl und einen booleschen Wert handelt. Ich hoffe, dass ich Ihnen eine Hand geliehen habe.