1 / 7

C 언어에서의 재귀함수 (recursive function) 를 이용한 프로그래밍

C 언어에서의 재귀함수 (recursive function) 를 이용한 프로그래밍. 차 영환. “ 순환 ” 또는 “ 재귀 ” (recursion) 란 n- 차의 함수를 정의할 때 이보다 1 차 낮은 (n-1)- 차의 함수를 사용하고 , 또한 (n-1)- 차의 함수 역시 그 보다 1 차 낮은 함수를 사용하여 순환적으로 반복적 형태로 정의되는 함수를 말한다 . 순환 ( 재귀 ) 함수의 예 - n ! = n * (n-1) ! - sum(n) = n + sum(n-1)

kasi
Télécharger la présentation

C 언어에서의 재귀함수 (recursive function) 를 이용한 프로그래밍

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C 언어에서의 재귀함수(recursivefunction)를이용한 프로그래밍 차 영환

  2. “순환” 또는 “재귀”(recursion)란 n-차의 함수를 정의할 때 이보다 1차 낮은 (n-1)-차의 함수를 사용하고, 또한 (n-1)-차의 함수 역시 그 보다 1차 낮은 함수를 사용하여 순환적으로 반복적 형태로 정의되는 함수를 말한다. • 순환(재귀) 함수의 예 • - n ! = n * (n-1) ! • - sum(n) = n + sum(n-1) • - F(n) = F(n-1) + F(n-2) • 순환(재귀) 함수를 사용하는 이유 • - 복잡한 알고리즘의 간단, 명료한 구현가능 순환(재귀), Recursion 이란?

  3. 함수 구조 • ……………….. • rf(n, …); // 재귀함수호출 • ……………….. • rf(n, …) // 재귀함수 정의 • { • ………… • if (종료조건) // 종료 조건 만족 시 수행 • return ……..; • else// n-1에 대한 재귀 호출 • returnrf(n-1, …); • ………… • } C 언어에서의 순환(재귀) 함수 사용

  4. <문제> 1부터 10까지의 정수에 대한 factorial을 구하시오. <배경지식> - N ! = N ⅹ (N-1)! (종료조건  N=0일 때 N! = 1) 사용 예 <프로그램> #include <stdio.h> longfact(int ); int main(void) { int n; for (n=1; n<15; n++) printf(“%2d = %10ld\n”, n, fact(n)); return 0; } long fact(int i) { if (i==0) // 종료 조건 return1L; else // 재귀 호출 return ( i * fact(i-1) ); }

  5. <문제> 1부터 100까지의 각각의 정수에 대해 1부터 해당 정수까지의 합을 구하는 프로그램을 재귀함수를 사용하여 작성하시오. <배경지식> sum(n) = n+ sum(n-1) 단, 종료 조건  n=1이면 sum(n)= 1 연습 1 <프로그램> #include <stdio.h> longsum(int ); int main(void) { int n; for (n=1; n<=100; n++) printf(“%2d = %10ld\n”, n, sum(n)); return 0; } long sum(int i) { if (i==1) // 종료조건 return1L; // 1L == 1l else // 재귀 호출 return ( i + sum(i-1) ); }

  6. <문제> 1부터 100까지의 각각의정수에 대하여 1부터 자신의 수까지의 짝수들의 합을 구하는 프로그램을 재귀함수를 사용하여 작성하시오. 즉, 8이면 2+4+6+8이고 7이면 2+4+6을 수행해야 한다. 연습 2 <배경지식> sum(n) = n+ sum(n-2) if n%2 == 0 sum(n) = (n-1) + sum(n-2) otherwise 단, 종료 조건  n=2이면 sum(n)= 2 n=1이면 sum(n)=0 n=0이면 sum(n)=0 <재귀함수 구성 예> sum(20) = 20+ sum(18) sum(11) = 10 + sum(8)

  7. <프로그램> #include<stdio.h> longesum(int ); int main(void) { int n; for (n=1; n<=100; n++) printf(“%2d = %10ld\n”, n, esum(n)); return 0; } long esum(int i) { if (i==0) return 0L; else if (i==1) return 0L; else if (i==2) return 2L; else { if ( i%2 == 0) return (i + esum(i-2)); else // if ( i%2 == 1) return (i-1 + esum(i-3)); } } 연습 2

More Related