У меня следующий пример кода, где я использовал предварительно декрементРазница между до и после декремента в рекурсивной функции аргумента
void function(int c)
{
if(c == 0)
{
return;
}
else
{
cout << "DP" << c << endl;
function(--c);
cout << c << endl;
return;
}
}
Эта функция дает выход для входа 4, как:
DP3
DP2
DP1
DP0
0
1
2
3
Но когда я использование пост декремент
void function(int c)
{
if(c == 0)
{
return;
}
else
{
cout << "DP" << c << endl;
function(c--);
cout << c << endl;
return;
}
}
Выход идет в бесконечном цикле с DP4
Не могли бы вы объяснить мне подробно, почему это происходит?
Это происходит потому, что будет вызвана функция (c--) с тем же значением c и при завершении c будет уменьшаться. Но поскольку он рекурсивно называется, следовательно, он будет вызываться с одинаковым значением без каких-либо шансов на возврат, и в итоге вы столкнетесь с ошибкой переполнения стека. –
Можете ли вы объяснить мне, как работают pre и post? –
Предположим, что int x = 1, y = 0; Теперь y = x ++ приведет к y == 1 и x == 2. Но если вы выполняете y = ++ x, тогда bot x и y будут равны 2. –