Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Inkrementacja/dekrementacja vs dodanie/odjęcie jedynki

Ostatnio zmodyfikowano 2018-01-07 21:38
Autor Wiadomość
Anette
Temat założony przez niniejszego użytkownika
Inkrementacja/dekrementacja vs dodanie/odjęcie jedynki
» 2017-12-20 18:26:06
To raczej głupie pytanie, ale czy istnieje jakakolwiek różnica przykładowo między wyrażeniem n++ a n = n + 1? Powiedzmy, że mamy pewną funkcję rekurencyjną, która wykonuje dane działanie na liczbie n. W sytuacji, gdy napiszę return n*funkcja(n - 1) dostanę poprawny wynik, ale jeśli odjęcie jedynki jest tym samym co dekrementacja to powinno przecież działać tak samo przy return n*funkcja(--n).
P-168029
Monika90
» 2017-12-20 18:53:40
Wyrażenie n - 1 nie zmienia wartości zmiennej n, a wyrażenia --n oraz n = n - 1 zmieniają.

Zastanów się, czy w wyrażeniu n * funkcja(--n), to pierwsze n ma już nową wartość czy jeszcze tę poprzednią?
P-168030
Anette
Temat założony przez niniejszego użytkownika
» 2018-01-07 21:24:52
Wydaje mi się, że pierwsze n w tym wyrażeniu po pierwszym wykonaniu się tej funkcji ma już nową wartość. Ale n ma się przecież zmieniać, więc nie rozumiem.
P-168476
pekfos
» 2018-01-07 21:38:49
Kolejność obliczania podwyrażeń jest nieokreślona, poza paroma wyjątkami, i kompilator może przyjąć dowolną wersję. n * funkcja(--n) może równie dobrze mieć wartość n * funkcja(n - 1), jak i (n - 1) * funkcja(n - 1). Kod z taką niejednoznacznością jest błędny.
P-168479
« 1 »
  Strona 1 z 1