该程序的输出

问题描述:

#include<stdio.h> 

void f(void) 
{ 
    int s = 0; 
    s++; 
    if(s == 10) 
     return; 
    f(); 
    printf("%d ", s); 
} 
int main(void) 
{ 
    f(); 
} 

该程序的输出是什么! 我m分段故障......它是什么?该程序的输出

+1

是什么阻止你在逃避吗? – codaddict 2010-08-26 17:43:10

+5

然后输出是分段错误错误。 – BoltClock 2010-08-26 17:43:13

+2

就是这样!!!!!!!! – 2010-08-26 17:50:58

这里的问题是,你没有静态初始化s。所以它会总是开始为0,每次你打电话f(),和f()不断调用自己一遍又一遍,但从来没有满足if(s == 10)。调用堆栈最终溢出和繁荣,分段错误。

你的程序是一个无限循环;你会得到分段错误,因为你最终会溢出你的堆栈。

问题是你递归地调用f,每次都不改变任何东西。你可能会遇到堆栈溢出。

每当您拨打f时,都会将s初始化为0并对其进行增加。它永远不会达到10.

你应该做的是或者使s参数为f或者使s静态。

由于s是一个局部变量,因此每次递归调用f()都会获得它自己的副本。因此,每次s都将是1,并且您会收到堆栈溢出异常。

如何使变量s静态?

该程序进入无限循环。 原因是: s对f()是局部的,因此每当调用f()时,s都被初始化为0.然后它被加1,再次调用f()。这一次,f()使用其本地副本&将s初始化为0 &再次以递归方式调用f()。这会产生无限循环&该程序会产生分段故障。由于递归无限调用,seg故障的原因是堆栈溢出。 要解决此问题,请将其设为静态或使其成为全局,而不是本地。

这是一个自我调用的递归函数。但是,这是一个无限循环,因为每次调用计数器时,int s = 0;都会重置计数器。它将打印一个无穷无尽的0行。

样品溶液:

int main (void) { 
    f(0); 
} 

void f (int s) { 
    if (s == 10) 
     return; 
    printf("%d ", s); 
    f(s++); 
} 

我不擅长与C语法,但这个想法是合理的。

无限循环。这可能是类似的东西你想

#include<stdio.h> 

void f(int s) 
{ 
    s++; 
    if(s == 10) 
     return; 
    f(s); 
    printf("%d ", s); 
} 
int main(void) 
{ 
    f(0); 
} 

这可能是一个更有趣的节目是什么:

void f(int s) 
{ 
    s++; 
    if(s == 10) 
    return; 
    f(s); 
    printf("%d ", s); 
} 

int main(void) 
{ 
    f(0); 
} 

,将打印:

9 8 7 6 5 4 3 2 1

+0

或者你可以只声明'static int s = 0;'而是。 – torak 2010-08-26 18:41:05

这个程序的输出是这个网站的名称。

正如其他人建议应声明s作为static int s = 0