主题:一个递归函数的修改
dd8924
[专家分:0] 发布于 2010-05-01 11:36:00
#include "stdio.h"
long ff(int n)
{
long f;
if(n<0)
printf("n<0,input error");
else if(n==0||n==1)
f=1;
else
f=ff(n-1)*n;
return(f);
}
void main()
{
int n;
long y;
printf("\ninput a inteager number:\n");
scanf("%d",&n);
y=ff(n);
printf("%d!=%ld",n,y);
}
这是用递归求一个整数的阶乘,照这个程序敲出来的话,输入一个负数也有阶乘输出,这个该怎么改啊?只在被调函数里改哦。。
回复列表 (共15个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-05-01 17:34:00
if(n<0)的时候你光printf一下,还要正常return,所以有输出,在那个printf之后加一条exit -1;就搞定了
板凳
晓予天信 [专家分:20] 发布于 2010-05-01 18:21:00
我觉得 不过N是不是负 你main中的 printf("%d!=%ld",n,y);肯定会被执行 所有要在main中加个判断才行...
3 楼
晓予天信 [专家分:20] 发布于 2010-05-01 18:22:00
我觉得 不管N是不是负 你main中的 printf("%d!=%ld",n,y);肯定会被执行 所有要在main中加个判断才行...
4 楼
yuyifan6510 [专家分:0] 发布于 2010-05-08 16:23:00
当n<0的时候,ff函数还是会正常的返回f的值。
你的主函数和被调函数里均没为f付初值。
所以编译器会随机输出一个f的值。所以当你输入一个负数时也会输出你那所谓的负数的阶乘!!!
5 楼
wangzining [专家分:620] 发布于 2010-05-08 16:57:00
if(n<0)
{
printf("n<0,input error");
return 0;
}
6 楼
caomang [专家分:150] 发布于 2010-05-08 17:19:00
一楼的最好。就听他的就可以了。
7 楼
fairydream [专家分:0] 发布于 2010-05-13 23:13:00
1楼的方法不错,不过那样就退出程序了,可以参照5楼的!
8 楼
fairydream [专家分:0] 发布于 2010-05-13 23:17:00
一楼的方法不错,不过那样就退出程序了,可以选择5楼的
9 楼
雪光风剑 [专家分:27190] 发布于 2010-05-13 23:22:00
[quote]一楼的方法不错,不过那样就退出程序了,可以选择5楼的[/quote]
不退出程序的话会输出一个错误的值,原来的问题还是没有改正
10 楼
tassandar [专家分:0] 发布于 2010-05-14 00:55:00
你如果输入0会输出0!=1吧。
我来回复