Почему эта программа идет по бесконечному циклу?

Когда я извинил эту программу Белу, это печать 5 inifnitely. Зачем?
Это потому, что декремент не происходит или перед декрементом происходит вызов функции?

Я попробовал альтернативный способ изготовления fun(--n)Дала правильный ответ. Но почему это не работает для fun(n--)?

void fun(int n)
{
if(!n)
{
cout << n << " " << endl;
}
else
{
cout << n << " "<<endl;
fun(n--);
}
}

int main()
{
int n = 5;
fun(n);
system("pause");
return 0;
}

1

Решение

Обратите внимание, что foo( n-- ) вернусь n а затем уменьшить n один (см. этот), следовательно, возвращаются 5, 5, 5, … повторяется. Вам нужно сделать один из следующих:

foo( --n ); // or,
foo( n - 1 );

… и, таким образом, ваш код должен выглядеть так:

void fun( int n ) {
if( !n ) {
cout << n << " " << endl;
} else {
cout << n << " "<< endl;

n--;
fun( n );
}
}

int main( void ) {
int n = 5;

fun( n );
system("pause");

return 0;
}

В сторону: Рекомендуется не включать никакие операции увеличения или уменьшения в другое выражение. Если бы вы сделали следующее, это было бы нормально:

n--;
foo( n );

… это может привести к путанице как у клиента (и даже у программиста), если вы начнете увеличивать и уменьшать выражения. Рассмотрим это как еще один пример, где это плохой идея:

if ( ( condition_1 == true ) && ( i++ == val ) )

… если первое условие false оно никогда не достигнет второго условия и, следовательно, не увеличится i,

3

Другие решения

тебе нужно сделать foo(--n) и не foo(n--)

  • —n уменьшит значение n, а затем отправит уменьшенное значение
  • n— уменьшит значение n, но отправит предварительно уменьшенный
    значение.

поэтому, когда вы делаете foo(n--) вы уменьшаете значение n, но отправляете foo Функция n до снижения. как вы можете догадаться, что это будет продолжаться вечно

void fun(int n)
{
if(!n)
{
cout << n << " " << endl;
}
else
{
cout << n << " "<<endl;
fun(--n);
}
}

int main()
{
int n = 5;
fun(n);
system("pause");
return 0;
}

узнать больше о разнице между n-- а также --n читать Вот

7

Так как fun(n--); означает вызовfun со значением n а также затем декремент n,

3

Так как n-- возвращается n до уменьшая его значение. Так как вы вызываете свою функцию таким образом, n всегда приходит с одинаковым значением.
Вы могли бы написать func(n--) сюда :

int temp = n;
n = n - 1;
func(temp);
3

использование fun(--n) вместо fun(n--)

Это происходит потому, что n-- уменьшается после запуска функции, возвращая 5 раз, пока --n декременты до.

2

пытаться :

void fun(int n)
{
if(!n)
{
cout << n << " " << endl;
}
else
{
cout << n << " "<<endl;
fun(--n);
}
}
2

Вы предоставили fun () то же значение, что и в предыдущем вызове.

1
По вопросам рекламы [email protected]