AN INTRODUCTION TO RECURSION
What is recursion? <ul><li>반복적인 (recursive 한 )  함수  </li></ul><ul><li>매우 훌륭한 프로그래밍 툴 이다 . </li></ul><ul><li>생각 하기가 어려울 수도 ...
Example <ul><li>function HelloWorld(count) </li></ul><ul><li>{ </li></ul><ul><li>if(count<1)return; </li></ul><ul><li>prin...
Why use Recursion? <ul><li>Recursion  보다 그냥 루프를 통해서 해결 할 수도 있다 . </li></ul><ul><li>약간 복잡할 때 빛을 본다  </li></ul><ul><li>Recur...
Hierarchies, Networks, or Graphs <ul><li>여러 변수나 저장된 정보들이 서로 연관성이 있는 경우 . </li></ul>
Example <ul><li>function countEmployeesUnder(employeeName)  </li></ul><ul><li>{ </li></ul><ul><li>declare variable counter...
Recursion  사용하기 전에 <ul><li>“ mission statement”  </li></ul><ul><ul><li>현재는 자기 자신은 포함하지 않는 상태 </li></ul></ul><ul><ul><li>만약...
Multiple Related Decisions <ul><li>한 종류의 결과만 필요할 경우에는 그 한가지에 대해서만 하면 된다 . </li></ul><ul><li>여러 종류의 결과가 필요할 경우는  ?  </li></...
Multiple Related Decisions <ul><li>주어진 미로 에서 스타팅 포인트를 먼저 찾는다 .  </li></ul><ul><li>그 스타팅 포인트에서부터 탐색을 시작한다 . </li></ul>
<ul><li>function isMazeSolveable(maze[][]) </li></ul><ul><li>{  </li></ul><ul><li>declare variables x,y,startX,startY  </l...
<ul><li>function exploreMaze(maze[][],x,y)  </li></ul><ul><li>{ </li></ul><ul><li>  // If the current position is off the ...
<ul><li>  // Otherwise, keep exploring by trying each possible </li></ul><ul><li>  // next decision from this point. If an...
Explicit Recursive Relationships <ul><li>피보나치 수열 </li></ul><ul><ul><li>Fibonacci[0] = 0  </li></ul></ul><ul><ul><li>Fibona...
MEMO  를 하라  <ul><li>function fib(n)  </li></ul><ul><li>{  </li></ul><ul><li>declare variable i,memo[n]  </li></ul><ul><li>...
MEMO  를 하라  <ul><li>function calcFibonacci(n,memo)  </li></ul><ul><li>{  </li></ul><ul><li>// If we've got the answer in o...
<ul><li>Thank you </li></ul><ul><li>  Q&A </li></ul>
Upcoming SlideShare
Loading in...5
×

An introduction to recursion

509

Published on

2011/1/6 seminar slide

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
509
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Count 0 일 경우 리컬젼 하지 않고 종료 – 베이스 케이스 Count-1 을 통해 무한 루프를 피함 점점 simple 해짐 - 점점 심플하게 하는게 좋다 . 한 개의 함수로 커다란 문제를 해결 .
  • 글로벌 변수 사용하면 리턴 밸류가 필요없기도 하다
  • 문제점이 잇다 ! 점점 심플 하게 만들어야 하는 룰을 적용하지 않았다 ! 이미 탐색한 곳은 다시 탐색 안하기 ! 2 차원 배열을 한 개 더
  • TCHS SRM 29 div1 level2 – 빠른 길찾기 Srm 459 div2 level 1 – 반복된 원의 넓이 합 ! Srm 460 div2 level3 – 길 추가하면서 길찾기 sRM 453.5 div1 level3 - 행운의 숫자 찾기 .
  • An introduction to recursion

    1. 1. AN INTRODUCTION TO RECURSION
    2. 2. What is recursion? <ul><li>반복적인 (recursive 한 ) 함수 </li></ul><ul><li>매우 훌륭한 프로그래밍 툴 이다 . </li></ul><ul><li>생각 하기가 어려울 수도 있다 . </li></ul>
    3. 3. Example <ul><li>function HelloWorld(count) </li></ul><ul><li>{ </li></ul><ul><li>if(count<1)return; </li></ul><ul><li>print(&quot;Hello World!&quot;); </li></ul><ul><li>HelloWorld(count - 1); </li></ul><ul><li>} </li></ul><ul><li>- Recursion 에 대한 중요한 포인트를 볼수 있다 . </li></ul>
    4. 4. Why use Recursion? <ul><li>Recursion 보다 그냥 루프를 통해서 해결 할 수도 있다 . </li></ul><ul><li>약간 복잡할 때 빛을 본다 </li></ul><ul><li>Recursion 사용하면 유용한 몇몇 종류의 형태가 있다 . </li></ul>
    5. 5. Hierarchies, Networks, or Graphs <ul><li>여러 변수나 저장된 정보들이 서로 연관성이 있는 경우 . </li></ul>
    6. 6. Example <ul><li>function countEmployeesUnder(employeeName) </li></ul><ul><li>{ </li></ul><ul><li>declare variable counter </li></ul><ul><li>counter = 0 </li></ul><ul><li>for each person in employeeDatabase </li></ul><ul><li>{ </li></ul><ul><li> if(person.manager == employeeName) </li></ul><ul><li>{ </li></ul><ul><li> counter = counter + 1 </li></ul><ul><li> counter = counter+countEmployeesUnder(person.name) </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>return counter </li></ul><ul><li>} </li></ul>
    7. 7. Recursion 사용하기 전에 <ul><li>“ mission statement” </li></ul><ul><ul><li>현재는 자기 자신은 포함하지 않는 상태 </li></ul></ul><ul><ul><li>만약에 자기 자신도 자기한테 report 한다면 !? </li></ul></ul><ul><ul><li>문제가 복잡해질수록 잘 생각해야 한다 . </li></ul></ul><ul><ul><li>생각하는데 시간이 오래 걸릴지라도 먼저 문제의 정확한 요점을 기록하고 시작한다 . </li></ul></ul>
    8. 8. Multiple Related Decisions <ul><li>한 종류의 결과만 필요할 경우에는 그 한가지에 대해서만 하면 된다 . </li></ul><ul><li>여러 종류의 결과가 필요할 경우는 ? </li></ul><ul><ul><li>미로 문제의 경우 ! </li></ul></ul>
    9. 9. Multiple Related Decisions <ul><li>주어진 미로 에서 스타팅 포인트를 먼저 찾는다 . </li></ul><ul><li>그 스타팅 포인트에서부터 탐색을 시작한다 . </li></ul>
    10. 10. <ul><li>function isMazeSolveable(maze[][]) </li></ul><ul><li>{ </li></ul><ul><li>declare variables x,y,startX,startY </li></ul><ul><li>startX=-1 startY=-1 </li></ul><ul><li>// Look through grid to find our starting point </li></ul><ul><li> for each x from A to H </li></ul><ul><li> for each y from 1 to 8 </li></ul><ul><li> if maze[x][y]=='S‘ then </li></ul><ul><li> { </li></ul><ul><li>startX=x </li></ul><ul><li>startY=y </li></ul><ul><li> } </li></ul><ul><li>// If we didn't find starting point, maze isn't solveable </li></ul><ul><li> if startX==-1 then return false </li></ul><ul><li> // If we did find starting point, start exploring from that point </li></ul><ul><li> return exploreMaze(maze[][],startX,startY) </li></ul><ul><li>} </li></ul>
    11. 11. <ul><li>function exploreMaze(maze[][],x,y) </li></ul><ul><li>{ </li></ul><ul><li> // If the current position is off the grid, then </li></ul><ul><li>// we can't keep going on this path </li></ul><ul><li>if y>8 or y<1 or x<'A' or x>'H' then return false </li></ul><ul><li>// If the current position is a '*', then we </li></ul><ul><li>// can't continue down this path </li></ul><ul><li>if maze[x][y]=='*' then return false </li></ul><ul><li>// If the current position is an 'E', then </li></ul><ul><li>// we're at the end, so the maze is solveable. </li></ul><ul><li>if maze[x][y]=='E' then return true </li></ul>
    12. 12. <ul><li> // Otherwise, keep exploring by trying each possible </li></ul><ul><li> // next decision from this point. If any of the options </li></ul><ul><li> // allow us to solve the maze, then return true. We don't </li></ul><ul><li> // have to worry about going off the grid or through a wall – </li></ul><ul><li> // we can trust our recursive call to handle those possibilities </li></ul><ul><li> // correctly. </li></ul><ul><li> if exploreMaze(maze,x,y-1) then return true // search up </li></ul><ul><li> if exploreMaze(maze,x,y+1) then return true // search down </li></ul><ul><li> if exploreMaze(maze,x-1,y) then return true // search left </li></ul><ul><li> if exploreMaze(maze,x+1,y) then return true // search right </li></ul><ul><li> // None of the options worked, so we can't solve the maze </li></ul><ul><li> // using this path. return false </li></ul><ul><li>} </li></ul>
    13. 13. Explicit Recursive Relationships <ul><li>피보나치 수열 </li></ul><ul><ul><li>Fibonacci[0] = 0 </li></ul></ul><ul><ul><li>Fibonacci[1] = 1 </li></ul></ul><ul><ul><li>Fibonacci[n] = Fibonacci[n-2] + Fibonacci[n-1] </li></ul></ul><ul><ul><li>function fib(n) </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><ul><li>if(n<1)return 0 </li></ul></ul></ul><ul><ul><ul><li>if(n==1)return 1 </li></ul></ul></ul><ul><ul><ul><li>return fib(n-2) + fib(n-1) </li></ul></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>느리다 ! 중복적인 계산도 한다 ! </li></ul></ul>
    14. 14. MEMO 를 하라 <ul><li>function fib(n) </li></ul><ul><li>{ </li></ul><ul><li>declare variable i,memo[n] </li></ul><ul><li>for each i from 0 to n </li></ul><ul><li>memo[i]=-1 </li></ul><ul><li>memo[0]=0 </li></ul><ul><li>memo[1]=1 </li></ul><ul><li>return calcFibonacci(n,memo) </li></ul><ul><li>} </li></ul>
    15. 15. MEMO 를 하라 <ul><li>function calcFibonacci(n,memo) </li></ul><ul><li>{ </li></ul><ul><li>// If we've got the answer in our memo, no need to recalculate </li></ul><ul><li>if memo[n]!=-1 then return memo[n] </li></ul><ul><li>// Otherwise, calculate the answer and store it in memo </li></ul><ul><li>memo[n] = calcFibonacci(n-2,memo) </li></ul><ul><li>+ calcFibonacci(n-1,memo) </li></ul><ul><li>// We still need to return the answer we calculated </li></ul><ul><li>return memo[n] </li></ul><ul><li>} </li></ul>
    16. 16. <ul><li>Thank you </li></ul><ul><li> Q&A </li></ul>

    ×