Когда я извинил эту программу Белу, это печать 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;
}
Обратите внимание, что 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
,
тебе нужно сделать foo(--n)
и не foo(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
читать Вот
Так как fun(n--);
означает вызовfun
со значением n
а также затем декремент n
,
Так как n--
возвращается n
до уменьшая его значение. Так как вы вызываете свою функцию таким образом, n
всегда приходит с одинаковым значением.
Вы могли бы написать func(n--)
сюда :
int temp = n;
n = n - 1;
func(temp);
использование fun(--n)
вместо fun(n--)
Это происходит потому, что n--
уменьшается после запуска функции, возвращая 5 раз, пока --n
декременты до.
пытаться :
void fun(int n)
{
if(!n)
{
cout << n << " " << endl;
}
else
{
cout << n << " "<<endl;
fun(--n);
}
}
Вы предоставили fun () то же значение, что и в предыдущем вызове.