Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- CustomTab
- async
- design pattern
- SHA512
- SHA1
- ChromeTab
- template
- RAII
- ranges
- kotlin
- c++
- program
- Observer
- Scala
- go
- haskell
- Clojure
- type_traits
- sprintf
- traits
- Chrono
- coroutines
- web
- sha256
- Functional
- WebView
- AES
- stringprintf
- Android
- Reflect
Archives
- Today
- Total
프로그래밍 검색 블로그
clojue fibonacci / memoize 본문
피보나치 수열을 clojure로 만들어보자
일반적으로 피보나치 수열은 C++로
이런 방식으로 만들수 있는데 (코드가 비효율적인 것은 일단 논외로)
1 2 3 4 5 | int fibo(int a){ if(a == 0) return 1; if(a == 1) return 1; return fibo(a - 1) + fibo(a - 2); } | cs |
이걸 일단 그대로 clojure 로 옮겨보면
1 2 3 4 5 | (defn fibo [n] (case n 0 1 1 1 (+ (fibo (- n 1)) (fibo (- n 2))))) | cs |
이렇게 나올수 있다
이걸 clojure에서는 memoize 함수를 사용해서 저장시킬수 있다
C++로 비슷하게 생각해보면 아마 이렇게 될것이다
1 2 3 4 5 6 7 8 | int mem[100] = {1,1,}; int fibo(int a){ if(a == 0) return 1; if(a == 1) return 1; if(mem[a] == 0) mem[a] = fibo(a - 1) + fibo(a - 2); return mem[a]; } | cs |
memoize 사용
1 2 3 4 5 6 | (def fibo (memoize #(case %1 0 1 1 1 (+ (fibo (dec %1)) (fibo (- %1 2)))))) | cs |
defn 이 아니라 그냥 def 변수로 설정해서 memoize를 할당하였다
함수는 람다식으로 하였는데 보기 불편하거나 약간 복잡해지면 fn으로 바꿔서 일반 함수로 만들어도 똑같이 동작한다
'clojure기초' 카테고리의 다른 글
clojure 오버로딩 2 (defmulti / defmethod) (0) | 2017.10.29 |
---|---|
clojue fibonacci / lazy-seq (0) | 2017.10.29 |
clojure 오버로딩 (0) | 2017.10.28 |
clojure java와 연결 (0) | 2017.10.28 |
clojure 함수형 프로그래밍 3 (apply) (0) | 2017.10.26 |
Comments