วันนี้ผมได้เจอโจทย์ข้อนึงมีเนื้อความตามนี้ครับ
//Ques.)
//How many times the program will print "IndiaBIX" ?
#include
int main()
{
printf(" Learn Programming ");
main();
return 0;
}
//A. Infinite times
//B. 32767 times
//C. 65535 times
//D. Till stack overflows
ทำไห้ผมสงสัยแล้วมานั่งคิดว่าเอ๊ข้อนี้จะตอบอะไรดีจึงไปนั่งเปิดหนังสือ+ถามพี่ๆ ตอนแรกผมคิดว่า ประกาศmainเป็นint แฮะมันแปลก ๆเพราะปรกติแล้วประกาศเป็น void main()ก็ได้ผมจึงตั้งข้อสงสัยว่า int เก็บค่าได้ -32,768 ถึง 32,767 ซึ่งมันคือ 65535 ตัว ผมเลยคิดว่าน่าจะตอบข้อC แต่พอไปนั่งอ่านดี ๆ ความแตกต่างของ int main() กับ void main() คือ
int main()จะรีเทรินค่า แต่ void main() จะไม่รีเทรินค่า
int main()เราสัญญากับคอมไพเลอร์ว่า หลังจากทำงานเสร็จ ส่วน void main()สัญญากับคอมไพเลอร์ว่าเราจะไม่ส่งอะไรมาให้
จึงจบการงงตรงนี้เสียทีสรุปแล้วตัดข้อBกับCไปได้เลยเพราะว่ามันไม่เกี่ยวเลยการใช้INTหมายถึงค่าที่รีเทรินออกมาจองไว้มีขนาด=int แค่นั้นเอง ไม่เกี่ยวกับการทำrecursive function จึงจบบทสรุปนี้ไปได้
จากนั้นผมจึงลองรันโปรแกรมไห้มันนับเองเลยจากโค้ด
ทำไห้ผมสงสัยแล้วมานั่งคิดว่าเอ๊ข้อนี้จะตอบอะไรดีจึงไปนั่งเปิดหนังสือ+ถามพี่ๆ ตอนแรกผมคิดว่า ประกาศmainเป็นint แฮะมันแปลก ๆเพราะปรกติแล้วประกาศเป็น void main()ก็ได้ผมจึงตั้งข้อสงสัยว่า int เก็บค่าได้ -32,768 ถึง 32,767 ซึ่งมันคือ 65535 ตัว ผมเลยคิดว่าน่าจะตอบข้อC แต่พอไปนั่งอ่านดี ๆ ความแตกต่างของ int main() กับ void main() คือ
int main()จะรีเทรินค่า แต่ void main() จะไม่รีเทรินค่า
int main()เราสัญญากับคอมไพเลอร์ว่า หลังจากทำงานเสร็จ ส่วน void main()สัญญากับคอมไพเลอร์ว่าเราจะไม่ส่งอะไรมาให้
จึงจบการงงตรงนี้เสียทีสรุปแล้วตัดข้อBกับCไปได้เลยเพราะว่ามันไม่เกี่ยวเลยการใช้INTหมายถึงค่าที่รีเทรินออกมาจองไว้มีขนาด=int แค่นั้นเอง ไม่เกี่ยวกับการทำrecursive function จึงจบบทสรุปนี้ไปได้
จากนั้นผมจึงลองรันโปรแกรมไห้มันนับเองเลยจากโค้ด
#include
int counter;
int main()
{
counter++;
printf(" IndiaBIX %d", counter);
main();
return 0;
}
ผมทดลองได้4847 ครั้งครับ จึงไปถาม อ. ได้คำตอบว่า "การรัน Command แต่ละครั้ง มันขอ RAM มาจำนวนหนึ่ง (ปกติในดอส ก็ 640 kB)" มันจึงสุดแค่นี้
ส่วนการเขียนโปรแกรม recursive function จะรันบน stack แล้วผมจึงมาพิจารณาดูว่า recursive function จากโจทย์ข้างต้น มันไม่มีที่สิ้นสุดแปลว่า จะเกิดเหตุการณ์stack overflows ผมจึงตอบข้อD
เป็นอะไรที่เหนื่อยและได้ความรู้ดีครับถึงจะเป็นเรื่องพื้นฐานแต่ชวนคิดได้ทีเดียว
ผมทดลองได้4847 ครั้งครับ จึงไปถาม อ. ได้คำตอบว่า "การรัน Command แต่ละครั้ง มันขอ RAM มาจำนวนหนึ่ง (ปกติในดอส ก็ 640 kB)" มันจึงสุดแค่นี้
ส่วนการเขียนโปรแกรม recursive function จะรันบน stack แล้วผมจึงมาพิจารณาดูว่า recursive function จากโจทย์ข้างต้น มันไม่มีที่สิ้นสุดแปลว่า จะเกิดเหตุการณ์stack overflows ผมจึงตอบข้อD
เป็นอะไรที่เหนื่อยและได้ความรู้ดีครับถึงจะเป็นเรื่องพื้นฐานแต่ชวนคิดได้ทีเดียว


