c语言用递归法求n!中的一个小步骤

来源:百度知道 编辑:UC知道 时间:2024/09/28 09:30:11
其中一步long fact(int n)
{
long k;
if(n<0)
printf("data error!\n");
exit(0);
} 到这里我懂得。但下面一步,请看
else if(n==0//n==1) k=1;
else k=n*fact(n-1);
return k;
我的问题是,if(n==0//n==1) 为什么,n=0时,k也等于1?
乘以一个0,那么值不就是0了吗?谢谢!

这不是数学上的规定吗,0的阶乘等于1.就是为了这个。

0的阶乘是1呵
规定的哈

根据阶乘的定义,0!=1,这是数学中对阶乘的约定。

n == 0 或 n == 1时就该结束运算了,

返回的时侯是返回到这里的【fact(n-1)】,用1来替代了【fact(n-1)】
k=n*fact(n-1);

如果你返回0,那么整个算式就等于0了,而返回1,则整个算式还是原来的值不变。

你这函数有毛病elseif 上面没if。。。。。。乘以一个0,那么值不就是0了吗?
当然是零了
当n-1==0时fact(n-1)返回0,那么k=n*fact(n-1)也返回0不管N是几就都返回0.所以n=0时要返回1

为 0

当n-1==0时fact(n-1)返回0,那么k=n*fact(n-1)也返回0不管N是几就都返回0.所以n=0时要返回1