c - 递归函数中的分段错误
问题描述
我试图通过递归查找阶乘。我的函数有效,但为什么我在输入-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 的阶乘不存在。
推荐阅读
- php - 在 foreach 循环问题中使用 preg_replace
- php - 多个 AJAX 调用 - 第一次获取数据并转换为 JSON 对象,第二次更新 $_SESSION 信息
- c# - 获取.net中选中的单选按钮列表
- c# - 获取:“文档将导致无效的 XML 文档”错误
- python - 父文件夹脚本 FileNotFoundError
- highcharts - 下载 highchart 时需要 Highchart 水印图像
- laravel - Laravel Dusk 测试的全局 CSS 选择器
- python - 在 Python 中管理日期
- docker - GCP 负载均衡器:502 服务器错误,“failed_to_connect_to_backend”
- apache-kafka - Kafka producer Bench-marking,无法理解结果