当我执行这个belo程序时,它正在打印5
。为什么?
是因为减量没有发生还是在减量发生之前函数调用正在发生?
我尝试了制作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;
}
答案 0 :(得分:7)
您需要foo(--n)
而不是foo(n--)
所以当你执行foo(n--)
时,你会减去n的值,但是发送到foo
函数n nofore递减。正如你猜测那将永远存在
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
阅读here
答案 1 :(得分:3)
因为fun(n--);
表示使用值fun
和调用n
,然后减少n
。
答案 2 :(得分:3)
因为n--
在递减其值之前返回n
。由于您以这种方式调用函数,n
始终具有相同的值。
您可以这样写func(n--)
:
int temp = n;
n = n - 1;
func(temp);
答案 3 :(得分:3)
请注意,foo( n-- )
将返回n
,然后将n
减1(请参阅this),因此返回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
。
答案 4 :(得分:2)
使用fun(--n)
代替fun(n--)
这种情况发生的原因是因为n--
在函数运行之后递减,而--n
在之前递减时反复返回5。
答案 5 :(得分:2)
尝试:
void fun(int n)
{
if(!n)
{
cout << n << " " << endl;
}
else
{
cout << n << " "<<endl;
fun(--n);
}
}
答案 6 :(得分:1)
您提供与之前调用中提供的fun()相同的值。