首页 > 解决方案 > 递归函数中的分段错误

问题描述

我试图通过递归查找阶乘。我的函数有效,但为什么我在输入-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);
}

标签: crecursionfactorial

解决方案


回答这个问题:您将得到堆栈溢出,因为您的递归方法永远不会正常结束(请参阅所有评论)。

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

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

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

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


推荐阅读