我的代码给了我一个分段错误,我做错了什么?

时间:2018-05-26 06:45:12

标签: c

#include<stdio.h>

int fact(int n); 

int main()
{   
    int n,f;
    scanf("%d",&n);
    f=fact(n);
    printf("factorial of %d is %d",n,f);
    return 0;
}
int fact(int n)    
{
    if(n==1)
    {
        return 1;

    }
    else
    {
        return n*fact(n-1);

    }
}

我试图使用C和递归函数在factorial上创建一个基本程序,但由于某种原因,它不会运行。在编译时,我遇到了分段错误(SIGSEGV)。

2 个答案:

答案 0 :(得分:0)

我没有尝试,但它似乎没有包含错误。检查你的号码将被计算为factorial。你输入负数还是太大数?如果输入负数,递归函数将不会退出。

答案 1 :(得分:0)

我在网上https://www.onlinegdb.com/复制了你的程序 并运行它没有问题。我给出了小的输入数字,如5和12,它计算了阶乘。因此编译没有任何问题,然后进入执行阶段。我还将-Wall作为命令行参数,然后再编译并运行。对您的程序的唯一改进可能是输出一行指令, “输入一个整数&gt; 1:” 当你用户阅读输入时,首先检查它是否> 1然后调用该函数,否则终止执行而不调用该函数。