请帮我解决这个函数调用的问题,为什么结果是24呢?????

来源:百度知道 编辑:UC知道 时间:2024/09/22 06:58:33
int f(int n)
{
if(n==0||n==1)
return 1;
else
return n*f(--n);

}
main()
{
printf("%d\n",f(5));
}

n*f(--n)
按优先级,先计算--n,在算乘法

n*f(--n)就相当于
n=n-1
n*f(n);

应该是120吧
5×4×3×2×1=120

f(0)=1
f(1)=1
f(2)=1*f(1)
f(3)=2*f(2)=2
f(4)=3*f(3)=3*2=6
f(5)=4*f(4)=24
(因为--n是前-,所以要先减了之后再计算所以f(2)=1*f(1)而不是f(2)=2*f(1)
后面的方法一样

int f(int n)
{
printf("%d\n",n); //在这里加条显示语句看看n值的变化可能你就知道为什么是那个结果了

关键语句就是 return n*f(--n)了。
不过很奇怪的问一句,这句为什么不改成 return n*f(n-1)
楼主喜欢用++ --这样容易出问题的语句吗?又难理解,又容易出错。

我测试了一下 return f(--n)*n 结果是一样的,说明这个语句的执行顺序是先自减然后才参与运算,很奇怪