C 为什么var k在初始化为0时会出现分段错误?
我想知道为什么这个程序会给我一个分段错误。请注意,我已经通过将变量k的值从0更改为1解决了这个问题。虽然它解决了我的问题,但我想知道当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,递归永远不会结束 您
#包括
#包括
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)