2017-10-16 12 views
-4

Dies ist das Skript:Welcher Teil davon ist eine nicht negative ganze Zahl? (Faktorielles Fehler)

n=input('Enter the number of rows: ') 
PT=zeros(n); 
row=1; 
col=1; 
while row~=n+1 
    for col=1:1:n 
    PT(row, col)=(factorial(row-1)/(factorial(col-1)*factorial(row-col))); 
    end 
    row=row+1; 
    col=1; 
end 
PT 

Wenn ich es laufen, sagt es die Anzahl der Zeilen eingeben, so gebe ich ‚4‘. Dann heißt es

error: factorial: all N must be real non-negative integers 
error: called from 
    factorial at line 40 column 5 
    hw6p2 at line 7 column 17 

Ich verstehe nicht, was los ist.

+0

Was möchten Sie hier implementieren? Welche Formel? –

+0

Zitat aus der Hilfe, * "Fragen, die Debugging-Hilfe suchen (" warum funktioniert dieser Code nicht? "), Müssen das * *** gewünschte Verhalten ***, ... * enthalten Siehe: So erstellen Sie ein [MCVE ]. "* –

+0

Sie haben einen Teil des Zitats aus der Hilfe weggelassen, die besagt, dass diese Frage innerhalb der Richtlinien liegt. Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein spezifisches Problem ** oder einen Fehler und den kürzesten Code enthalten, um es in der Frage selbst zu reproduzieren ** –

Antwort

3

In der Zeile for col=1:1:n, col kann n, auch auf den Wert erhalten, wenn row noch 1 ist. Wenn Sie also factorial(row-col) anrufen, können 1rowcol2 sein. Hier kann es negativ sein.

+2

Dies sollte ein Kommentar IMO sein, da dies die Lösung des Problems nicht bietet. Es zeigt nur das Problem –

+1

Die Frage war, welcher Teil ihres Codes das negative Fakultät verursacht. Ich denke, das beantwortet diese Frage. –

+2

Manchmal kann die Antwort sogar Ja/Nein sein, aber das macht es keine angemessene Antwort IMO –

-2

Ihr faktorieller Eingang sollte nicht negativ sein ..... in der Schleife (row-col) wird ein negativer Wert genommen und der Fehler ist aufgetreten. Verwenden Sie abs, um es immer positiv zu machen.

n=input('Enter the number of rows: ') 
PT=zeros(n); 
row=1; 
col=1; 
while row~=n+1 
    for col=1:1:n 
    PT(row, col)=(factorial(row-1)/(factorial(col-1)*factorial(abs(row-col)))); 
    end 
    row=row+1; 
    col=1; 
end 
PT 
Verwandte Themen