这个n==0是不是没用的啊?

来源:百度知道 编辑:UC知道 时间:2024/06/08 11:16:01
#include<stdio.h>
void main()
{float fac(int n);
int n;
float y;
printf(“input an interger number:”);
scanf(“%d”,&n);
y=fac(n);
printf(“%d!=%10.0f\n”,n,y);
}
float fac(int n)
{float f;
if(n<0)
{ printf(“n<0,dataerror!”);
}
else
if(n==0∣∣n==1)
f=1;
else
f=fac(n-1)*n;
return(f);
}
我 个人觉得 if(n==0∣∣n==1) 中的n==0可以省略 因为当n=1的时候 f=1了 就不用再次调用了,所以就不用再次n-1了 大家觉得呢?

如果输入必为正整数的话,你的理解是正确的,
由于这个程序中n是以一递减的,
所以在n=1时,已经可以正常到达递归的出口,进行退栈,
所以不写n==0也没有关系

但是这样写更加严谨,可以直接进行输入值为0的异常处理

不行,如果不加n==0的话,编译器会执行最后一个else后的内容:f=fac(n-1)*n,这就是说又调用了fac(0),同理接下来又执行fac(-1),于是会显示n<0,dataerror!

不行的,机器不认,他会在你输入0时,

你的f=fac(n-1)*n语句会在当N=0时先执行fac(-1)也就是执行if(n<0)
{ printf(“n<0,dataerror!”);

结果答案变成了“n<0,dataerror0!=0”

当然是不能省略啊,假如你输入n=0,会执行f=fac(0-1)*0,结果是
printf(“n<0,dataerror!”); n=1也是一样,只要出现f(0)就会继续执行f=fac(n-1)*n;最终都是printf(“n<0,dataerror!”);

看不懂!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1