Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
algorithm:recursion [2016/06/07 13:59] – 만듦 ledyxalgorithm:recursion [2022/06/14 20:05] (current) – [해설] 그림 크기 수정 ledyx
Line 1: Line 1:
 = Recursion = = Recursion =
-http://xeyez.nflint.com/wiki/index.php?title=Recursion 
-{{tag>Tips}} 
  
-= 합 =+{{tag>algorithm}} 
 + 
 += 기초 = 
 + 
 +* 이해의 관점 
 +  * Heap 영역의 새로운 주소값을 갖는 **복사본** 함수를 생성한다! 
 +  * 가장 마지막에 호출된 함수가  가장 먼저 종료 된다! (**L**ast **I**n **F**irst **O**ut, Stack) 
 +* 주의점! 
 +  * 반드시 __**탈출 조건**__이 있어야 한다.(= 탈출조건이 없으면 계속 복사본 함수를 만들어내어 값을 반환(Return)하지 못한다.) 
 + 
 + 
 +== 예시 == 
 + 
 +<sxh c> 
 +#include <studio.h> 
 + 
 +void Recursion(int num) { 
 + 
 + //탈출 조건 
 + if(num <= 0) 
 + return; 
 + 
 + //탈출 조건을 만들기 위한 인자(Argument)와 재귀 호출 
 + Recursion(num-1); 
 + 
 + printf("%2d번째 재귀 호출!\n", num); 
 +
 + 
 +void main() { 
 + Recursion(3); 
 +
 +</sxh> 
 + 
 + 
 +{{:algorithm:recursion2.jpg|}} 
 + 
 + 
 +=== 해설 === 
 + 
 +* <fc red>→ 연쇄적 호출</fc> 
 +* <fc blue>→ 연쇄적 반환</fc> 
 + 
 +{{ :algorithm:recursion1.jpg?nolink |}} 
 +=== 결론 === 
 + 
 +* "<fc red>연쇄적 호출</fc> → <fc blue>연쇄적 역반환</fc>"을 보이고 있다. 
 +* 재귀함수 호출이 있으면 그 다음 코드는 그 시점에서 무시된다. (☞ printf()가 무시된 것에 주목!) 
 +* "역반환"시에 출력되는 값이 자기 자신의 재귀함수에서 호출되는 매개변수(Parameter)값이다. 
 +  * 반환시 복사본 함수를 호출하여 값을 읽어오기 때문 
 + 
 + 
 + 
 + 
 += 예제 = 
 + 
 +== 합 ==
 <sxh java> <sxh java>
  public static int sum(int n) {  public static int sum(int n) {
Line 13: Line 66:
 </sxh> </sxh>
  
-= Factorial =+== Factorial ==
 <sxh java> <sxh java>
  private static int factorial(int n) {  private static int factorial(int n) {
Line 23: Line 76:
 </sxh> </sxh>
  
-= Fibonacci Array =+== Fibonacci Array ==
 <sxh java> <sxh java>
  public static int fibonacci(int n) {  public static int fibonacci(int n) {
Line 41: Line 94:
 </sxh> </sxh>
  
-= Hanoi Tower =+== Hanoi Tower ==
 <sxh java> <sxh java>
  public static void hanoiTower(int n, String from, String to, String temp) {  public static void hanoiTower(int n, String from, String to, String temp) {
algorithm/recursion.1465304395.txt.gz · Last modified: 2021/02/07 03:15 (external edit)