Inkrementacja/dekrementacja vs dodanie/odjęcie jedynki
Ostatnio zmodyfikowano 2018-01-07 21:38
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). |
|
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ą? |
|
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. |
|
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. |
|
« 1 » |