Recursive

์žฌ๊ท€๋Š” ์Šค์Šค๋กœ ํ˜ธ์ถœํ•˜๋‹ค ์กฐ๊ฑด์„ ๋งŒ๋‚˜ ์ข…๋ฃŒ๋ฅผํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์žฌ๊ท€ vs ๊ผฌ๋ฆฌ์žฌ๊ท€

return์— ์—ฐ์‚ฐ์ด ์žˆ์œผ๋ฉด ์ผ๋ฐ˜์ ์ธ ์žฌ๊ท€๋ฌธ์ž…๋‹ˆ๋‹ค.

์žฌ๊ท€
fun sum(n:Int):Int=
    if (n==1) 1
    else n+ sum(n-1)

return์— ์—ฐ์‚ฐ์ด ์—†์œผ๋ฉด ๊ผฌ๋ฆฌ์žฌ๊ท€์ž…๋‹ˆ๋‹ค

fun sum(n:Int, sum:Int = n):Int=
    if (n==1) sum
    else sum(n-1, sum+n-1)

์žฌ๊ท€ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฃจํ”„๋ฌธ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๊ณ„์† ์Šคํƒ์ด ์Œ“์ด๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Tailrec

์ฝ”ํ‹€๋ฆฐ์—์„œ๋Š” tailrec์œผ๋กœ ์œ„์™€๊ฐ™์€ ๊ผฌ๋ฆฌ์žฌ๊ท€๋ฌธ์„ ์‰ฝ๊ฒŒ Loop๋ฅผ ์ด์šฉํ•œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

tailrec fun rec(level:Long): Long {
    return if (level == 1L) 1
    else rec(level - 1)
}
์‹ค์ œ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ
fun recwhile(level:Long): Long {
    var level = level
    while (level != 1L) {
        level--
    }
    return 1
}

์œ„ ๋ฐฉ์‹์ฒ˜๋Ÿผ ๊ผฌ๋ฆฌ์žฌ๊ท€๋ฅผ ์—†์• ๊ณ , ๋ฃจํ”„๋ฅผ ์ด์šฉํ•œ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค

Last updated