回 帖 发 新 帖 刷新版面

主题:一个递归函数的修改

#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个回复)

沙发

if(n<0)的时候你光printf一下,还要正常return,所以有输出,在那个printf之后加一条exit -1;就搞定了

板凳

我觉得  不过N是不是负   你main中的 printf("%d!=%ld",n,y);肯定会被执行   所有要在main中加个判断才行...

3 楼

我觉得  不管N是不是负   你main中的 printf("%d!=%ld",n,y);肯定会被执行   所有要在main中加个判断才行...

4 楼


当n<0的时候,ff函数还是会正常的返回f的值。
    你的主函数和被调函数里均没为f付初值。
  所以编译器会随机输出一个f的值。所以当你输入一个负数时也会输出你那所谓的负数的阶乘!!!

5 楼

if(n<0) 
{
    printf("n<0,input error");
    return 0;
}

6 楼

一楼的最好。就听他的就可以了。

7 楼


1楼的方法不错,不过那样就退出程序了,可以参照5楼的!

8 楼

一楼的方法不错,不过那样就退出程序了,可以选择5楼的

9 楼

[quote]一楼的方法不错,不过那样就退出程序了,可以选择5楼的[/quote]
不退出程序的话会输出一个错误的值,原来的问题还是没有改正

10 楼

你如果输入0会输出0!=1吧。

我来回复

您尚未登录,请登录后再回复。点此登录或注册