C 为什么var k在初始化为0时会出现分段错误?

C 为什么var k在初始化为0时会出现分段错误?,c,C,我想知道为什么这个程序会给我一个分段错误。请注意,我已经通过将变量k的值从0更改为1解决了这个问题。虽然它解决了我的问题,但我想知道当k为0时,逻辑/系统会发生什么 #包括 #包括 int-fact-of-nk(int); int-fact-of-of-k(int); int-fact-of-of-n(int); int main() { int事实n,事实k,事实nk,bmu,k=0,nk; 对于(int n=1;n这里会出现堆栈溢出,因为如果调用k(0)中的fact\u,递归永远不会结束 您

我想知道为什么这个程序会给我一个分段错误。请注意,我已经通过将变量k的值从0更改为1解决了这个问题。虽然它解决了我的问题,但我想知道当k为0时,逻辑/系统会发生什么

#包括
#包括
int-fact-of-nk(int);
int-fact-of-of-k(int);
int-fact-of-of-n(int);
int main()
{
int事实n,事实k,事实nk,bmu,k=0,nk;

对于(int n=1;n这里会出现堆栈溢出,因为如果调用k(0)中的
fact\u,递归永远不会结束


您的代码由于递归而出现分段错误。看看程序中发生了什么。您将
k
传递给
fact\u of_k
k
是0,并且
0!=1
。因此它再次调用
fact\u of_k
,这次是
0-1
,所以-1.-1不是一,所以它再次调用
fact\u of_of k
,这次是ssing-2.你可以看到问题所在。过度使用递归会导致分段错误,这就是你的程序无法工作的原因。

首先正确格式化你的代码。什么是
fact\u of n
fact\u of k
?你的代码中到底更改了什么?代码中有两个
k=0
。函数
fact\u of k()
事实\u of n()
不做任何影响
main()
main()中任何内容的事情
只打印数字序列。因此,如果有任何错误,则是您没有发布的函数。我为您缩进了代码。--由于您向我们展示的源代码目前没有可检测的问题,请您提问并提供调用函数的源代码。当然,您应该发布
事实和
fact\u of_n
函数。否则我们怎么可能找出代码中的错误呢?现在我看到基本情况将永远不会为真,从而停止调用并导致错误。现在我清楚了错误的原因。感谢您用简单的步骤解释它。
int fact_of_k(int choose)
{
  printf("Choose = %d\n", choose);   // <<<< add this

  if (choose == 1)
    return 1;
  else
    return choose * fact_of_k(choose - 1);
}
if (choose == 1)