Je nach Plattform können Sie in einigen Sprachen den Status in der Funktion beibehalten. VB.Net, zum Beispiel:
Function f(ByVal n As Integer) As Integer
Static flag As Integer = -1
flag *= -1
Return n * flag
End Function
IIRC, C++ erlaubt dies auch. Ich vermute jedoch, dass sie nach einer anderen Lösung suchen.
Eine andere Idee ist, dass man, da das Ergebnis des ersten Funktionsaufrufs nicht definiert wurde, mit ungerade/ungerade steuern könnte, ob das Vorzeichen invertiert werden soll:
int f(int n)
{
int sign = n>=0?1:-1;
if (abs(n)%2 == 0)
return ((abs(n)+1)*sign * -1;
else
return (abs(n)-1)*sign;
}
Addiere eins zum Betrag aller geraden Zahlen, subtrahiere eins vom Betrag aller ungeraden Zahlen. Das Ergebnis von zwei Aufrufen hat denselben Betrag, aber bei dem einen Aufruf, bei dem es gerade ist, vertauschen wir das Vorzeichen. Es gibt einige Fälle, in denen dies nicht funktioniert (-1, max oder min int), aber es funktioniert viel besser als alles andere, was bisher vorgeschlagen wurde.
6 Stimmen
Um welche Stelle ging es bei diesem Vorstellungsgespräch?