์ฝ”๋“œ๋ชฝํ‚ค๋ฅผ ๋ฒ—์–ด๋‚˜๊ธฐ ์œ„ํ•ด ์ฒซ๋ฒˆ์งธ ์ฑ…์œผ๋กœ SICP๋ฅผ ์ •๋…์ค‘.ย 


์—ฌํƒœ๊นŒ์ง€ ์š”์•ฝ ํ•˜๋ฉด,ย 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ดํ•ดํ•ด๊ฐ€ ์œ„ํ•ด์„œ๋Š”ย 

๊ทธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์–ด๋–ป๊ฒŒ ํ”„๋กœ์‹œ์ €์™€ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š”์ง€๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.ย 

๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋‹จ์œ„์™€ ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœ์‹œ์ ธ๋ฅผ ๋ฐฐ์› ๊ณ ,ย 

๊ทธ๊ฒƒ๋“ค์„ ํ™œ์šฉํ•ด์„œ ์กฐ๊ธˆ ๋” ๋ณต์žกํ•œ ํ‘œํ˜„์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฐ€๋ฅผ ๋ฐฐ์› ๊ณ ,ย 

๊ทธ ๋ณต์žกํ•œ ํ‘œํ˜„์ด ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์ธ์ง€ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค.ย 


์˜ค๋Š˜์€ ๊ณ„์†ํ•ด์„œ, ์กฐ๊ธˆ ๋” ๋ณต์žกํ•œ ํ‘œํ˜„์„ ์—ฐ์Šตํ•˜๋Š” ์ฑ•ํ„ฐ๋ฅผ ์š”์•ฝ ์ •๋ฆฌํ•œ๋‹ค.ย 


-----------------------------------------------------------


Exponentiation (์ œ๊ณฑ) ์— ๋Œ€ํ•ด์„œ.ย 


์ œ๊ณฑ์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์žฅ ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•์€ recursive ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.ย 

ย 

์ด๊ฒƒ์„ Lisp๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.ย 



๋ณด๋ฉด ์•Œ๋‹ค์‹œํ”ผ, ์ด๊ฒƒ์€ Linear recursive ์ด๋ฏ€๋กœ, n์ด ์ปค์ง€๋ฉด ๊ณ„์‚ฐ์ˆ˜๋„ ๊ทธ๊ฑฐ์— ๋น„๋ก€ํ•ด์„œ ๋Š˜์–ด๋‚˜๊ณ ,ย 

์žฌ๊ท€ ํ•จ์ˆ˜๋„ ๊ทธ๋งŒํผ ๋ถˆ๋Ÿฌ์•ผ ํ•˜๋ฏ€๋กœ ์ €์žฅ๊ณต๊ฐ„๋„ n ๋งŒํผ ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค.ย 

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ด๊ฑฐ์˜ ๊ณ„์‚ฐ ์Šคํ…์€ย O(n), ๊ณ„์‚ฐ ๊ณต๊ฐ„๋„ O(n) ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.ย 


์ด๊ฒƒ์„ ๋ฆฌ๋‹ˆ์–ด ์ดํ„ฐ๋ ˆ์ด์…˜์œผ๋กœ ๋ฐ”๊พธ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๊ฟ€์ˆ˜ ์žˆ๋‹ค.ย 



๋ณด๋ฉด ์•Œ๋‹ค์‹œํ”ผ ์ค‘๊ฐ„๊ณ„์‚ฐ์„ ์ €์žฅํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ณ„์‚ฐ ์Šคํ…์€ ๋˜‘๊ฐ™์ด O(n)์ด๋‚˜ ์ €์žฅ๊ณต๊ฐ„์€ O(1) ์ธ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.ย 

๋ฆฌ์ปค์ ผ๊ณผ ์ดํ„ฐ๋ ˆ์ด์…˜์˜ ๊ทธ๋ฆผ ์„ค๋ช…์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐ.ย 

https://gall.dcinside.com/mgallery/board/view?id=game_dev&no=108191


์ด๋Ÿฌํ•œ ๊ณ„์‚ฐ๋“ค์„ ๋”์šฑ๋” ํšจ์œจ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ผผ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค.ย 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๊ฐ€์žฅ ๋น„ํšจ์œจ์ ์ธ๊ฒŒ ์ด๊ฑฐ๋ผ๋ฉดย 



๊ทธ๊ฑธ ์•ฝ๊ฐ„ ๋” ํšจ์œจ์ ์ด๊ฒŒ ํ•œ๋‹ค๋ฉด ์ด๋Ÿฐ๊ฑธ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๊ณ ย 


์ด๊ฑธ ์ผ๋ฐ˜ํ™” ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋œ๋‹ค.ย 


์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹คย 


์˜คํ˜ธ... ์ด๊ฒŒ ์ด๋Ÿฐ์‹์œผ๋กœ ํ‘œํ˜„์ด ๋˜๋Š”๊ตฌ๋‚˜...ย 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ 2^8์„ ๊ณ„์‚ฐํ•œ๋‹ค๊ณ  ํ•˜๋ฉดย 

(exp 2 8)

-> (square (exp 2 4))

-> (square (square (exp 2 2)))

-> (square (square (square (exp 2 1))))

-> (square (square (square (* 2 exp(2 0)))))

-> (square (square (square (* 2 1))))

-> (square (square (square (2))))

-> (square (square (4))))

-> (square (16))

->ย 256

์ด๋ฆฌ ๋œ๋‹ค๋Š” ๊ฑฐ์‹œ๊ตฌ๋งŒ.


์ด๊ฒƒ์€ ๊ณต๊ฐ„๋„ ๊ณ„์‚ฐ ์Šคํ…๋„ O(log n) ์ธ ๋ชจ์–‘.ย 

์ด ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ iterative ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์€ ์—ฐ์Šต๋ฌธ์ œ๋กœ ์žˆ๋Š”๋ฐ ํŒจ์Šค.ย 


์—ฌํŠผ ์˜ค๋Š˜๋„ ๋งค์šฐ ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ์ด์—ˆ๊ตฌ์š”.ย 

์•„์ง๋„ ๋ชธ์ด ๋‹ค ๋‚ซ์งˆ ์•Š์•˜์œผ๋ฏ€๋กœ ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€ย