У меня есть эта функция:
void m(int n)
{
if(n > 0)
m(--n);
cout << n << " "; //for n = 5 --> output is: 0 0 1 2 3 4
}
У меня проблема с пониманием того, как это работает.
Например:
n (вход) = 5
выход: 0 0 1 2 3 4
Мой вопрос: Почему он показывает ноль дважды?
Когда я добавляю скобки, как это:
void m(int n)
{
if(n > 0)
{
m(--n);
cout << n << " "; // now, it shows 0 1 2 3 4 (n = 5)
}
}
Итак, какие скобки вызывают в этом коде, что «0» существует только один раз?
И когда я изменяю пре-декремент (—n) на пост-декремент (n—), это ничего не показывает. Зачем?
Может ли кто-нибудь помочь мне понять, как это работает?
Первое, что нужно отметить: в C ++, если вы не ставите скобки после if
заявление, только следующая строка будет в заявлении.
Пример :
if(x > 0)
cout << 1;
cout << 2;
Вот cout << 2
всегда будет выполняться независимо от значения х
Правильный способ написания этого
if(x > 0)
{
cout << 1;
cout << 2;
}
То же самое касается else
заявления
Так что это было для скобок.
Мое дикое предположение для почтового декремента следующее:
если вы делаете m(n--)
, переданное значение будет 5, значение n будет меняться только после вызова функции и выйти за рамки (так что это не имеет значения). Так что произойдет бесконечное количество m (5) вызовов, и поэтому ничего не появляется. (Я не уверен насчет этой части, поэтому, пожалуйста, скажите мне, если не так)!
Надеюсь, это помогло!
Похоже, вы перепутали с синтаксисом Python, где if
определяется отступом. В C (и C ++, C #, Java и многих других языках) область действия — это одно утверждение (которое заканчивается ;
) если вы не используете фигурные скобки {
а также }
, В 1-м варианте вашего кода cout << n << ...
будет выполняться всегда, независимо от значения n
, Во втором варианте это будет выполнено только if(n > 0)