[問題] stackoverflow

看板C_Sharp (C#)作者 (Eplis)時間10年前 (2015/02/09 16:48), 編輯推噓1(109)
留言10則, 5人參與, 最新討論串1/1
今天看書在測試一個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://www.ptt.cc/bbs/C_Sharp/M.1423471694.A.48D.html

02/09 16:51, , 1F
因為test(9999)遞迴的次數太多,用光了stack的記憶體
02/09 16:51, 1F

02/09 20:24, , 2F
來試試 不同電腦應該會有不同的反應
02/09 20:24, 2F

02/09 22:31, , 3F
一樓正解
02/09 22:31, 3F

02/09 22:33, , 4F
每一次遞迴就多一層stack frame,如果能的話盡量用第
02/09 22:33, 4F

02/09 22:33, , 5F
二種方法
02/09 22:33, 5F

02/09 22:39, , 6F
不同電腦會不會有不同反應在C#我就沒去看,不過以前C++,
02/09 22:39, 6F

02/09 22:39, , 7F
stack大小是編譯的時候指定,跟電腦無關
02/09 22:39, 7F

02/09 22:44, , 8F
剛剛查了一下C#也是一樣,不指定的話預設1MB
02/09 22:44, 8F

02/10 01:44, , 9F
你要先弄懂 遞迴的資源管理
02/10 01:44, 9F

02/16 17:38, , 10F
看標題還以為在問知名網站
02/16 17:38, 10F
文章代碼(AID): #1Ks7HEID (C_Sharp)
文章代碼(AID): #1Ks7HEID (C_Sharp)