#include<stdio.h>
void f(void)
{
int s = 0;
s++;
if(s == 10)
return;
f();
printf("%d ", s);
}
int main(void)
{
f();
}
該程序的輸出是什麼! 我m分段故障......它是什麼?該程序的輸出
#include<stdio.h>
void f(void)
{
int s = 0;
s++;
if(s == 10)
return;
f();
printf("%d ", s);
}
int main(void)
{
f();
}
該程序的輸出是什麼! 我m分段故障......它是什麼?該程序的輸出
這裏的問題是,你沒有靜態初始化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
或者你可以只聲明'static int s = 0;'而是。 – torak 2010-08-26 18:41:05
這個程序的輸出是這個網站的名稱。
正如其他人建議應聲明s
作爲static int s = 0
是什麼阻止你在逃避嗎? – codaddict 2010-08-26 17:43:10
然後輸出是分段錯誤錯誤。 – BoltClock 2010-08-26 17:43:13
就是這樣!!!!!!!! – 2010-08-26 17:50:58