回 帖 发 新 帖 刷新版面

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

#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 楼

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

12 楼

0!本来就=1……

13 楼

#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 楼

主要是判断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 楼

[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不会被执行

我来回复

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