Last updated 2 years ago
Problem์ด ๋ ์์ SubProblem์ผ๋ก ์ชผ๊ฐ์ง ์ ์์ด์ผํ๋ค.
SubProblem์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ ์ ์์ด์ผํ๋ค.
์ค๋ณต๋ SubProblem์ด ๊ฒน์ณ์ผํ๋ค.
ํผ๋ณด๋์น ์์ด F(n)=F(nโ1)+F(nโ2)F(n) = F(n-1) + F(n-2)F(n)=F(nโ1)+F(nโ2)
func fibonacci(_ n: Int) -> Int { if [0, 1].contains(n) { return n } return fibonacci(n - 1) + fibonacci(n - 2) } print(fibonacci(10))
์ฃผ์ด์ง n์ ๊ตฌํ๊ธฐ ์ํด n๋ถํฐ n-1, n-2.. ๋ฅผ ํธ์ถํ๋ฉฐ ๊ฐ์ ๊ณ์ฐํ๋ค.
sub problem์ ๋ํ ์ค๋ณต ๊ณ์ฐ์ ์ผ์ด๋์ง ์์ง๋ง, ํจ์ stack์ด ๋ง์ด ์์ด๊ฒ ๋๋ค.
var fiboArray = [0, 1] func fibonacci(_ n: Int) -> Int { if fiboArray.count > n { return fiboArray[n] } let fibo = fibonacci(n-1) + fibonacci(n-2) fiboArray.append(fibo) return fibo } print(fibonacci(10))
์ฃผ์ด์ง n์ ๊ตฌํ๊ธฐ ์ํด 0๋ถํฐ n๊น์ง ๋ฐฐ์ด์ ์์๋๊ฐ๋ค.
๊ณต๊ฐ ๋ณต์ก๋๊ฐ O(n), ์๊ฐ๋ณต์ก๋ O(n)์ผ๋ก ํํํ ์ ์๋ค.
func fibonacci(_ n: Int) -> Int { if [0, 1].contains(n) { return n } var fiboArray = [0, 1] for i in 2...n { fiboArray.append(fiboArray[i-1] + fiboArray[i-2]) } return fiboArray[n] } print(fibonacci(10))