SlideShare a Scribd company logo
1 of 18
4. 재귀와 반복 관계
재귀적 정의
( recursive definition or inductive definition)

귀납적 정의 or 재귀적 정의
정의된 요소가 그 정의의 부분으로 나타나는 정의

재귀의 구성
-1.기저(basis)의 명시
-2.귀납적 또는 재귀적 단계 정의
재귀적 정의

재귀적 수열 ( recursive sequence )
- 수열에서 처음 하나 또는 두 개의 값이 알려져 있다. 그 수열의 다음 값들은 앞의 값에 의해
정의된다.

재귀적 집합 ( recursive set )
- 몇몇의 특정값들은 집합에 포함되어 있다고 알려져 있다. 집합의 다른 값들은 집합에 이미
포함된 값의 결합으로 만들어진다.

재귀적 연산 ( recursive operation )
- 몇몇의 "적은" 연산에는 값이 주어지고 다른 연산의 경우에는 앞의 값이 주어진 연산과 관
련하여 정의된다.

재귀적 알고리즘 ( recursive algorithms )
- 변수의 가장 작은 값에는 알고리즘 절차가 알려져 있다. 변수의 큰 값들에는 작은 변수값
과 연관되어 알고리즘이 자체로 수행된다.
재귀적 정의

Prime numbers
The prime numbers can be defined as consisting of:
 • 2, the smallest prime;
 • each positive integer which is not evenly divisible by any of
   the primes smaller than itself.
The integer 2 is our base case; checking the primality of any
larger integer X requires us to know the primality of every
integer between X and 2, but each such integer is closer to our
base case of 2 than X is.
재귀적 정의

one definition of the set N of natural numbers is:
 1. 0 is in N.
 2. If an element n is in N then n+1 is in N.
 3. N is the smallest set such satisfying (1) and (2).

지수연산에 대한 재귀적 정의
1.a^0 = 1
2. n>=1일 때 a^n=(a^(n-1))a

곱셈에 대한 재귀적 정의
1. m(1)=m
2. n>=2일 때, m(n) = m(n-1) + m
피보나치 수열!

F(1) = 1 , F(2) = 1 (basis 명시)
F(n) = F(n-2) + F(n-1) for n>2 (재귀적 정의)
1,1,2,3,5,8,13,21........

재귀적으로 정의된 수열
- 초기의 몇개의 값을 정의하고 그 값을 통해서 다음 값들이 정의되는 수열
반복관계 (recurrence relation 점화식이 더 익숙)
f(n) = f(n-2) + f(n-1) for n > 2
fibonacci function in c

int fibo(int n)
{
       if( n == 1 || n == 2 ) return 1;
       else return fibo(n-1) + fibo(n-2);
}
fibonacci function in assembly code
Dump of assembler code for function fibo:          0x0804834d <fibo+37>: push %eax
0x08048328 <fibo+0>: push %ebp                     0x0804834e <fibo+38>: call 0x8048328 <fibo>
0x08048329 <fibo+1>: mov %esp,%ebp                 0x08048353 <fibo+43>: add $0x10,%esp
0x0804832b <fibo+3>: push %ebx                     0x08048356 <fibo+46>: mov %eax,%ebx
0x0804832c <fibo+4>: sub $0x4,%esp                 0x08048358 <fibo+48>: sub $0xc,%esp
0x0804832f <fibo+7>: cmpl $0x1,0x8(%ebp)           0x0804835b <fibo+51>: mov 0x8(%ebp),%eax
0x08048333 <fibo+11>: je 0x804833d <fibo+21>       0x0804835e <fibo+54>: sub $0x2,%eax
0x08048335 <fibo+13>: cmpl $0x2,0x8(%ebp)          0x08048361 <fibo+57>: push %eax
0x08048339 <fibo+17>: je 0x804833d <fibo+21>       0x08048362 <fibo+58>: call 0x8048328 <fibo>
0x0804833b <fibo+19>: jmp 0x8048346 <fibo+30>      0x08048367 <fibo+63>: add $0x10,%esp
0x0804833d <fibo+21>: movl $0x1,0xfffffff8(%ebp)   0x0804836a <fibo+66>: add %eax,%ebx
0x08048344 <fibo+28>: jmp 0x804836f <fibo+71>      0x0804836c <fibo+68>: mov %ebx,0xfffffff8(%ebp)
0x08048346 <fibo+30>: sub $0xc,%esp                0x0804836f <fibo+71>: mov 0xfffffff8(%ebp),%eax
0x08048349 <fibo+33>: mov 0x8(%ebp),%eax           0x08048372 <fibo+74>: mov 0xfffffffc(%ebp),%ebx
0x0804834c <fibo+36>: dec %eax                     0x08048375 <fibo+77>: leave
                                                   0x08048376 <fibo+78>: ret
                                                   End of assembler dump.
fibonacci function in Erlang

-module(fibo).
-export([fibo/1]).
fibo(0) -> 0;
fibo(1) -> 1;
fibo(N) when N > 1 -> fibo(N-1) + fibo(N-2).

> c(fibo) .
{ok,fibo}
> fibo:fibo(10).
55
fibonacci function in J

 f1b=: {.@($:&0 1x) : ((<:@[ $: +/@|.@])^:(*@[)) NB. ??? WTF!!!!
 f1b




 f1b(1000)
43466557686937456435688527675040625802564660517371780402481729089536555
41794905189040387984007925516929592259308032263477520968962323987332247
1161642996440906533187938298969649928516003704476137795166849228875
fibonacci in tail recursion

int fibo(int n)
{
   fiboTail(n,1,1,1);
}

int fiboTail(int n,int i,int a,int b)
{
   if(n<=i) return a;
   else return fiboTail(n,i+1,b,a+b);
}

* tail recursion - 재귀의 연산을 끝(꼬리) 부터 해서 stack에 저장
할 필요를 없애는 알고리듬
fibonacci in dynamic programming!

점화식을 써보세요!


코드를 써보세요!
fibonacci in dynamic programming!


점화식 fk = fk-1 + fk-2 for k >= 2

머 똑같네
fibon[0] = 1;
fibon[1] = 1;
for (int i = 2; i <= n; ++i)
fibon[i] = fibon[i-1] + fibon[i-2];
or
fiboa = 1; fibob=1;
for(int i = 2; i <= n ; ++i){
   result = fiboa + fibob;
   fiboa=fibob; fibob=result;
}
fibonacci in template 메타 프로그래밍.

template< unsigned N > struct Fib
{
   enum
   {
      val = Fib<N-1>::Val + Fib<N-2>::Val
   };
};
template <> struct Fib<0>{ enum{ Val =0 }; };
template <> struct Fib<1>{ enum{ Val =1 }; };
cout << Fib<4>::Val << endl;

Fib<4>::Val 계산은 수행시간에 하는 것이 아닌 컴파일러가!
기저 S(1) = 2
반복관계 S(n) = 2S(n-1)라면
폐형해(closed-form solution)은 S(n) = 2^n


이진 탐색의 비교 수

C(n)=1+C(n/2)

그렇다면 오더는 얼마가 될까?
생각할 꺼리

큰문제가 동일한 작은문제로 풀린다면 재귀적 도출을 시도!

재귀적 정의가 퍼포먼스 향상을 위한 알고리즘 설계의 기반~
(백트래킹 부터 다이나믹까지)

하노이 탑을 어떻게 풀것인가?
생각해보세영
tail recursion으로 다른 간단한 recursion 변경해보기
요걸 그릴라면 어케할까.
Backus-Naur Form

<postal-address> ::= <name-part> <street-address> <zip-part>

   <name-part> ::= <personal-part> <last-name> <opt-jr-part> <EOL>
          | <personal-part> <name-part>

 <personal-part> ::= <first-name> | <initial> "."

<street-address> ::= <house-num> <street-name> <opt-apt-num> <EOL>

    <zip-part> ::= <town-name> "," <state-code> <ZIP-code> <EOL>

  <opt-jr-part> ::= "Sr." | "Jr." | <roman-numeral> | ""



[ WITH <common_table_expression> [ ,...n ] ]

<common_table_expression>::=
   expression_name [ ( column_name [ ,...n ] ) ]
 AS
   ( CTE_query_definition

More Related Content

What's hot

파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작Terry Cho
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function건희 김
 
Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730Yong Joon Moon
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개Terry Cho
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Yong Joon Moon
 
파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리Booseol Shin
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법Terry Cho
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편Yong Joon Moon
 
Python datatype
Python datatypePython datatype
Python datatype건희 김
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 Yong Joon Moon
 
고등학생 R&E Python summary for test
고등학생 R&E Python summary for test고등학생 R&E Python summary for test
고등학생 R&E Python summary for testKyunghoon Kim
 
[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)NAVER D2
 
[Swift] Functions
[Swift] Functions[Swift] Functions
[Swift] FunctionsBill Kim
 
Java mentoring of samsung scsc 0
Java mentoring of samsung scsc   0Java mentoring of samsung scsc   0
Java mentoring of samsung scsc 0도현 김
 
Haskell study 10
Haskell study 10Haskell study 10
Haskell study 10Nam Hyeonuk
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1happychallenge
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815Yong Joon Moon
 

What's hot (20)

파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function
 
Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815
 
파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리파이썬2.7 기초 공부한 것 정리
파이썬2.7 기초 공부한 것 정리
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편
 
Python datatype
Python datatypePython datatype
Python datatype
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기
 
고등학생 R&E Python summary for test
고등학생 R&E Python summary for test고등학생 R&E Python summary for test
고등학생 R&E Python summary for test
 
[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)
 
[Swift] Functions
[Swift] Functions[Swift] Functions
[Swift] Functions
 
Java mentoring of samsung scsc 0
Java mentoring of samsung scsc   0Java mentoring of samsung scsc   0
Java mentoring of samsung scsc 0
 
Haskell study 10
Haskell study 10Haskell study 10
Haskell study 10
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
 

Similar to 프리젠테이션-제목없음

알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조영기 김
 
동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programming동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programmingssuser889640
 
피보나치 수열과 파이썬.pptx
피보나치 수열과 파이썬.pptx피보나치 수열과 파이썬.pptx
피보나치 수열과 파이썬.pptxssuser791410
 
하스켈 프로그래밍 입문 2
하스켈 프로그래밍 입문 2하스켈 프로그래밍 입문 2
하스켈 프로그래밍 입문 2Kwang Yul Seo
 
이정근_project_로봇비전시스템.pdf
이정근_project_로봇비전시스템.pdf이정근_project_로봇비전시스템.pdf
이정근_project_로봇비전시스템.pdftangtang1026
 

Similar to 프리젠테이션-제목없음 (6)

알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programming동적 계획법 Dynamic Programming
동적 계획법 Dynamic Programming
 
피보나치 수열과 파이썬.pptx
피보나치 수열과 파이썬.pptx피보나치 수열과 파이썬.pptx
피보나치 수열과 파이썬.pptx
 
하스켈 프로그래밍 입문 2
하스켈 프로그래밍 입문 2하스켈 프로그래밍 입문 2
하스켈 프로그래밍 입문 2
 
R.T.Bach
R.T.BachR.T.Bach
R.T.Bach
 
이정근_project_로봇비전시스템.pdf
이정근_project_로봇비전시스템.pdf이정근_project_로봇비전시스템.pdf
이정근_project_로봇비전시스템.pdf
 

More from suitzero

Drawing on canvas
Drawing on canvasDrawing on canvas
Drawing on canvassuitzero
 
2.2.4 순환목록
2.2.4 순환목록2.2.4 순환목록
2.2.4 순환목록suitzero
 
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제1.4.2 코루틴연습문제
1.4.2 코루틴연습문제suitzero
 
The gravitational N -body pro
The gravitational N -body proThe gravitational N -body pro
The gravitational N -body prosuitzero
 
Clojure in the Wild
Clojure in the WildClojure in the Wild
Clojure in the Wildsuitzero
 
xUnitTestPattern/chapter16
xUnitTestPattern/chapter16xUnitTestPattern/chapter16
xUnitTestPattern/chapter16suitzero
 
HolubOnPatterns/chapter3_3
HolubOnPatterns/chapter3_3HolubOnPatterns/chapter3_3
HolubOnPatterns/chapter3_3suitzero
 
3장 자동적으로 움직이는 게임 에이전트 생성법_2
3장 자동적으로 움직이는 게임 에이전트 생성법_23장 자동적으로 움직이는 게임 에이전트 생성법_2
3장 자동적으로 움직이는 게임 에이전트 생성법_2suitzero
 
3장 자동적으로 움직이는 게임 에이전트 생성법
3장 자동적으로 움직이는 게임 에이전트 생성법3장 자동적으로 움직이는 게임 에이전트 생성법
3장 자동적으로 움직이는 게임 에이전트 생성법suitzero
 
부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리suitzero
 

More from suitzero (10)

Drawing on canvas
Drawing on canvasDrawing on canvas
Drawing on canvas
 
2.2.4 순환목록
2.2.4 순환목록2.2.4 순환목록
2.2.4 순환목록
 
1.4.2 코루틴연습문제
1.4.2 코루틴연습문제1.4.2 코루틴연습문제
1.4.2 코루틴연습문제
 
The gravitational N -body pro
The gravitational N -body proThe gravitational N -body pro
The gravitational N -body pro
 
Clojure in the Wild
Clojure in the WildClojure in the Wild
Clojure in the Wild
 
xUnitTestPattern/chapter16
xUnitTestPattern/chapter16xUnitTestPattern/chapter16
xUnitTestPattern/chapter16
 
HolubOnPatterns/chapter3_3
HolubOnPatterns/chapter3_3HolubOnPatterns/chapter3_3
HolubOnPatterns/chapter3_3
 
3장 자동적으로 움직이는 게임 에이전트 생성법_2
3장 자동적으로 움직이는 게임 에이전트 생성법_23장 자동적으로 움직이는 게임 에이전트 생성법_2
3장 자동적으로 움직이는 게임 에이전트 생성법_2
 
3장 자동적으로 움직이는 게임 에이전트 생성법
3장 자동적으로 움직이는 게임 에이전트 생성법3장 자동적으로 움직이는 게임 에이전트 생성법
3장 자동적으로 움직이는 게임 에이전트 생성법
 
부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리
 

프리젠테이션-제목없음

  • 2. 재귀적 정의 ( recursive definition or inductive definition) 귀납적 정의 or 재귀적 정의 정의된 요소가 그 정의의 부분으로 나타나는 정의 재귀의 구성 -1.기저(basis)의 명시 -2.귀납적 또는 재귀적 단계 정의
  • 3. 재귀적 정의 재귀적 수열 ( recursive sequence ) - 수열에서 처음 하나 또는 두 개의 값이 알려져 있다. 그 수열의 다음 값들은 앞의 값에 의해 정의된다. 재귀적 집합 ( recursive set ) - 몇몇의 특정값들은 집합에 포함되어 있다고 알려져 있다. 집합의 다른 값들은 집합에 이미 포함된 값의 결합으로 만들어진다. 재귀적 연산 ( recursive operation ) - 몇몇의 "적은" 연산에는 값이 주어지고 다른 연산의 경우에는 앞의 값이 주어진 연산과 관 련하여 정의된다. 재귀적 알고리즘 ( recursive algorithms ) - 변수의 가장 작은 값에는 알고리즘 절차가 알려져 있다. 변수의 큰 값들에는 작은 변수값 과 연관되어 알고리즘이 자체로 수행된다.
  • 4. 재귀적 정의 Prime numbers The prime numbers can be defined as consisting of: • 2, the smallest prime; • each positive integer which is not evenly divisible by any of the primes smaller than itself. The integer 2 is our base case; checking the primality of any larger integer X requires us to know the primality of every integer between X and 2, but each such integer is closer to our base case of 2 than X is.
  • 5. 재귀적 정의 one definition of the set N of natural numbers is: 1. 0 is in N. 2. If an element n is in N then n+1 is in N. 3. N is the smallest set such satisfying (1) and (2). 지수연산에 대한 재귀적 정의 1.a^0 = 1 2. n>=1일 때 a^n=(a^(n-1))a 곱셈에 대한 재귀적 정의 1. m(1)=m 2. n>=2일 때, m(n) = m(n-1) + m
  • 6. 피보나치 수열! F(1) = 1 , F(2) = 1 (basis 명시) F(n) = F(n-2) + F(n-1) for n>2 (재귀적 정의) 1,1,2,3,5,8,13,21........ 재귀적으로 정의된 수열 - 초기의 몇개의 값을 정의하고 그 값을 통해서 다음 값들이 정의되는 수열 반복관계 (recurrence relation 점화식이 더 익숙) f(n) = f(n-2) + f(n-1) for n > 2
  • 7. fibonacci function in c int fibo(int n) { if( n == 1 || n == 2 ) return 1; else return fibo(n-1) + fibo(n-2); }
  • 8. fibonacci function in assembly code Dump of assembler code for function fibo: 0x0804834d <fibo+37>: push %eax 0x08048328 <fibo+0>: push %ebp 0x0804834e <fibo+38>: call 0x8048328 <fibo> 0x08048329 <fibo+1>: mov %esp,%ebp 0x08048353 <fibo+43>: add $0x10,%esp 0x0804832b <fibo+3>: push %ebx 0x08048356 <fibo+46>: mov %eax,%ebx 0x0804832c <fibo+4>: sub $0x4,%esp 0x08048358 <fibo+48>: sub $0xc,%esp 0x0804832f <fibo+7>: cmpl $0x1,0x8(%ebp) 0x0804835b <fibo+51>: mov 0x8(%ebp),%eax 0x08048333 <fibo+11>: je 0x804833d <fibo+21> 0x0804835e <fibo+54>: sub $0x2,%eax 0x08048335 <fibo+13>: cmpl $0x2,0x8(%ebp) 0x08048361 <fibo+57>: push %eax 0x08048339 <fibo+17>: je 0x804833d <fibo+21> 0x08048362 <fibo+58>: call 0x8048328 <fibo> 0x0804833b <fibo+19>: jmp 0x8048346 <fibo+30> 0x08048367 <fibo+63>: add $0x10,%esp 0x0804833d <fibo+21>: movl $0x1,0xfffffff8(%ebp) 0x0804836a <fibo+66>: add %eax,%ebx 0x08048344 <fibo+28>: jmp 0x804836f <fibo+71> 0x0804836c <fibo+68>: mov %ebx,0xfffffff8(%ebp) 0x08048346 <fibo+30>: sub $0xc,%esp 0x0804836f <fibo+71>: mov 0xfffffff8(%ebp),%eax 0x08048349 <fibo+33>: mov 0x8(%ebp),%eax 0x08048372 <fibo+74>: mov 0xfffffffc(%ebp),%ebx 0x0804834c <fibo+36>: dec %eax 0x08048375 <fibo+77>: leave 0x08048376 <fibo+78>: ret End of assembler dump.
  • 9. fibonacci function in Erlang -module(fibo). -export([fibo/1]). fibo(0) -> 0; fibo(1) -> 1; fibo(N) when N > 1 -> fibo(N-1) + fibo(N-2). > c(fibo) . {ok,fibo} > fibo:fibo(10). 55
  • 10. fibonacci function in J f1b=: {.@($:&0 1x) : ((<:@[ $: +/@|.@])^:(*@[)) NB. ??? WTF!!!! f1b f1b(1000) 43466557686937456435688527675040625802564660517371780402481729089536555 41794905189040387984007925516929592259308032263477520968962323987332247 1161642996440906533187938298969649928516003704476137795166849228875
  • 11. fibonacci in tail recursion int fibo(int n) { fiboTail(n,1,1,1); } int fiboTail(int n,int i,int a,int b) { if(n<=i) return a; else return fiboTail(n,i+1,b,a+b); } * tail recursion - 재귀의 연산을 끝(꼬리) 부터 해서 stack에 저장 할 필요를 없애는 알고리듬
  • 12. fibonacci in dynamic programming! 점화식을 써보세요! 코드를 써보세요!
  • 13. fibonacci in dynamic programming! 점화식 fk = fk-1 + fk-2 for k >= 2 머 똑같네 fibon[0] = 1; fibon[1] = 1; for (int i = 2; i <= n; ++i) fibon[i] = fibon[i-1] + fibon[i-2]; or fiboa = 1; fibob=1; for(int i = 2; i <= n ; ++i){ result = fiboa + fibob; fiboa=fibob; fibob=result; }
  • 14. fibonacci in template 메타 프로그래밍. template< unsigned N > struct Fib { enum { val = Fib<N-1>::Val + Fib<N-2>::Val }; }; template <> struct Fib<0>{ enum{ Val =0 }; }; template <> struct Fib<1>{ enum{ Val =1 }; }; cout << Fib<4>::Val << endl; Fib<4>::Val 계산은 수행시간에 하는 것이 아닌 컴파일러가!
  • 15. 기저 S(1) = 2 반복관계 S(n) = 2S(n-1)라면 폐형해(closed-form solution)은 S(n) = 2^n 이진 탐색의 비교 수 C(n)=1+C(n/2) 그렇다면 오더는 얼마가 될까?
  • 16. 생각할 꺼리 큰문제가 동일한 작은문제로 풀린다면 재귀적 도출을 시도! 재귀적 정의가 퍼포먼스 향상을 위한 알고리즘 설계의 기반~ (백트래킹 부터 다이나믹까지) 하노이 탑을 어떻게 풀것인가? 생각해보세영 tail recursion으로 다른 간단한 recursion 변경해보기
  • 18. Backus-Naur Form <postal-address> ::= <name-part> <street-address> <zip-part> <name-part> ::= <personal-part> <last-name> <opt-jr-part> <EOL> | <personal-part> <name-part> <personal-part> ::= <first-name> | <initial> "." <street-address> ::= <house-num> <street-name> <opt-apt-num> <EOL> <zip-part> ::= <town-name> "," <state-code> <ZIP-code> <EOL> <opt-jr-part> ::= "Sr." | "Jr." | <roman-numeral> | "" [ WITH <common_table_expression> [ ,...n ] ] <common_table_expression>::= expression_name [ ( column_name [ ,...n ] ) ] AS ( CTE_query_definition