作者eplis (Eplis)
看板C_Sharp
標題[問題] stackoverflow
時間Mon Feb 9 16:48:10 2015
今天看書在測試一個fuction
public test(int i)
{
if(i>10)
{
i--;
test(i);
}
}
使用 test(50); 呼叫時沒問題
使用 test(9999); 會彈出 stackoverflow exception
想請問是甚麼會造成這樣的原因?
我若用 for迴圈則沒這個問題
for(int i=9999; i>10 ; i--)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.35.164.7
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Sharp/M.1423471694.A.48D.html
1F:→ wenyonba: 因為test(9999)遞迴的次數太多,用光了stack的記憶體 02/09 16:51
2F:推 les5277: 來試試 不同電腦應該會有不同的反應 02/09 20:24
3F:→ TobyH4cker: 一樓正解 02/09 22:31
4F:→ TobyH4cker: 每一次遞迴就多一層stack frame,如果能的話盡量用第 02/09 22:33
5F:→ TobyH4cker: 二種方法 02/09 22:33
6F:→ wenyonba: 不同電腦會不會有不同反應在C#我就沒去看,不過以前C++, 02/09 22:39
7F:→ wenyonba: stack大小是編譯的時候指定,跟電腦無關 02/09 22:39
8F:→ wenyonba: 剛剛查了一下C#也是一樣,不指定的話預設1MB 02/09 22:44
9F:→ VVll: 你要先弄懂 遞迴的資源管理 02/10 01:44
10F:→ zg0608x: 看標題還以為在問知名網站 02/16 17:38