帮帮小弟,谢谢了!!!!!!!!!!11

来源:百度知道 编辑:UC知道 时间:2024/06/06 19:23:07
#include <iostream>
using namespace std;
int arc(int n);
void main()
{
cout<<arc(5)<<endl;
}
int arc(int n)
{
if(n>1)
return(n*arc(--n));
else
return(1);
}
忘了说了,结果应该是120,为什么却是24啊!

所以你的程序的执行顺序是
1、cout<<arc(5)<<endl;
2、调用 arc(n) // n = 5
3、执行(return(n*arc(--n)); ) ----------aa
顺序为 3.1 --n // n = 4
3.2 语句aa 变为 return(4*arc(4));
3.3 重复 2 ,3 步骤

也就是说 由于 return(n*arc(--n)) 是先执行 --n 后
再执行n*...的
所以 第一次传进来的5 还没到n*...就变成4了
所以结果不对

可以作如下改动
int arc(int n)
{
int m = n;
if(n>1)
return(m * arc(--n));
else
return(1);
}
结果就对了

我C学的也不咋地。你是想问输出结果是什么吗?输出结果5*4*3*2*1也就是120.

问题出现在
return(n*arc(--n));
这个语句上
因为“--”操作符是先执行减一再作运算,因此结果为
return(4*arc(4));
最后递归的结果为:4*3*2*1*1=24
可以如下修改:
return(n*arc(n-1));
“--”操作符有时虽带来方便,但是使用时要注意。