主题:一个递归函数的修改
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个回复)
11 楼
tassandar [专家分:0] 发布于 2010-05-14 00:55:00
你如果输入0会输出0!=1吧。
12 楼
雪光风剑 [专家分:27190] 发布于 2010-05-14 08:14:00
0!本来就=1……
13 楼
tczf168 [专家分:0] 发布于 2010-05-14 13:14:00
#include "stdio.h"
long ff(int n)
{
long f;
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);
if(n<0)
printf("n<0,error");
y=ff(n);
printf("%d!=%ld",n,y);
}
14 楼
NTFNTF123 [专家分:100] 发布于 2010-05-14 21:06:00
主要是判断if(n<0)那里也应该有个返回值 并且此时应该终止程序的运行了
还有main函数里面的printf(...) 你这样不管n是否小于0都会被执行的哦
所以应该这样改:
#include "stdio.h"
#include"stdlib.h"
long ff(int n)
{
long f;
if(n<0)
{
printf("n<0,input error");
return 0;
exit (-1);
}
else
{
if(n==0||n==1) f=1;
else f=ff(n-1)*n;
}
return f;[/color]}
void main()
{
int n;
long y;
printf("\ninput a inteager number:\n");
scanf("%d",&n);
if(n<0) printf("error input!\n");
else
{ y=ff(n);
printf("%d!=%ld",n,y);
printf("\n");
}[/color]}
15 楼
雪光风剑 [专家分:27190] 发布于 2010-05-14 22:12:00
[quote]主要是判断if(n<0)那里也应该有个返回值 并且此时应该终止程序的运行了
还有main函数里面的printf(...) 你这样不管n是否小于0都会被执行的哦
所以应该这样改:
#include "stdio.h"
#include"stdlib.h"
long ff(int n)
{
long f;
if(n<0)
{
printf("n<0,input error");
return 0;
exit (-1);
}
else
{
if(n==0||n==1) f=1;
else f=ff(n-1)*n;
}
return f;[/color]}
void main()
{
int n;
long y;
printf("\ninput a inteager number:\n");
scanf("%d",&n);
if(n<0) printf("error input!\n");
else
{ y=ff(n);
printf("%d!=%ld",n,y);
printf("\n");
}[/color]}[/quote]
先return再exit,exit不会被执行
我来回复