递归函数中的分段错误

Segmantation fault in recursive function

我正在尝试通过 recursively.My 函数找到阶乘,但为什么我在输入 -1 时收到“分段错误(核心已转储)”。

#include <stdio.h>

int fak(int number);

int main(){

    int i;
    printf("give me an integer: ");
    scanf("%d",&i);

    printf("factorial: %d\n",fak(i));

    return 0;
}

int fak(int number){

    if(number == 1 || number == 0){
        return 1;
    }

    return number * fak(number - 1);
}

回答问题:你会得到堆栈溢出,因为你的递归方法永远不会正常结束(查看所有评论)。

如果你输入-1,该方法将用-2再次调用。 这取决于你的堆栈大小,它何时会崩溃。

您可以将您的条件更改为:

if(number <= 1){
    return 1;
}

除此之外:-1 的阶乘不存在。