c - 当 k 为 0 时,函数 fact_of_k 返回分段错误
问题描述
我想知道为什么这个程序给我一个分段错误。请注意,我通过将变量 k 的值从 0 更改为 1 解决了这个问题。虽然它解决了我的问题,但我想知道当 k 为 0 时逻辑/系统会发生什么?
#include <stdio.h>
#include <stdlib.h>
int fact_of_nk(int);
int fact_of_k(int);
int fact_of_n(int);
int main()
{
int fact_n, fact_k, fact_nk, bmu, k = 0, nk;
for (int n = 1; n <= 10; n++)
{
fact_n = fact_of_n(n);
while (k <= n)
{
fact_k = fact_of_k(k);
int nk = (n - k);
printf("%d ", nk);
k++;
}
k = 0;
printf("\n");
}
return 0;
}
int fact_of_n (int number)
{
if (number == 1)
return 1;
else
return number * fact_of_n(number - 1);
}
int fact_of_k (int choose)
{
if (choose == 1)
return 1;
else
return choose * fact_of_k(choose -1);
}
int fact_of_nk (int choose)
{
if (choose == 1)
return 1;
else
return choose * fact_of_nk(choose - 1);
}
解决方案
由于递归,您的代码会出现分段错误。看看你的程序中发生了什么。你k
传给fact_of_k
. k
为 0,并且0 != 1
。所以它fact_of_k
再次调用,这次是0 - 1
,所以 -1。-1 不是一,所以它fact_of_k
再次调用,这次传递了 -2。你可以看到问题。过多地使用递归会导致分段错误,这就是您的程序无法运行的原因。
推荐阅读
- css - 给定样式属性“网格区域”时如何修复我的网格项目不消失
- swift - RealmSwift LinkingObjects 和 Decodable
- docker - 在单独的 Docker 层中构建 go 依赖项
- npm - npm install 从 package-lock.json 中的几个包中删除“dev”:true?
- swift - 下载 Alamofire 后快速保存文件
- c# - 从 ComboBox BindingSource 获取对象
- c - 如何使用 strtok 剪切大小不同的字符串?
- python-3.x - 复值逻辑回归
- javascript - React Navigation:检测应用导航到哪个屏幕
- php - 如何定义索引?为什么我看到错误:遇到非数字值?