Chapter 11. 함수활용

Download Report

Transcript Chapter 11. 함수활용

Chapter 11. 함수활용
재귀 함수
 재귀(되부름, 순환, recursion)
함수는 함수 구현에서 자기 자신의 함수를 호출하는 것
 재귀함수의 특징
반복문과 유사
장점
 구현하려는 알고리즘 자체가 재귀적 특성을 갖는다면, 재귀 함
수를 이용하여 쉽게 구현이 가능
 코드가 간결해짐
단점
 재귀 함수는 계속적인 함수의 호출로 인하여 시간과 메모리 공
간의 효율성이 떨어짐
재귀 함수의 예
 n-factorial
 n! = n * (n-1) * (n-2) * … * 2 * 1
= n * (n-1)!
n!을 함수 factorial(n)로 구현한다면 함수 factorial(n) 구현에
서 다시 factorial(n-1)을 호출하여 그 결과를 이용할 수 있음
long factorial(int n)
{
…
result = n * factorial(n-1);
…
}
재귀 함수의 예
 재귀적 특징 추출
 예. 5!
5! = 5 * 4!
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
long factorial(int n)
{
1! = 1
long result = 0;
if(n == 1) { // if n == 1 then 1
result = 1;
}
else { // if n > 1 then n*(n-1)!
result = n * factorial(n-1);
}
return result;
}
if n > 1
then n * (n-1)!
if n == 1
then 1
재귀 함수의 예
 n! 을 구하는 프로그램 소스
#include <stdio.h>
long factorial(int n);
void main() {
int n=0;
long result = 0;
printf("한 수를 입력하세요 : ");
scanf("%d", &n);
result = factorial(n);
printf("%d! 의 값은 %d 입니다.
\n", n, result);
}
long factorial(int n)
{
long result = 0;
if(n == 1) {
result = 1;
}
else {
result = n * factorial(n-1);
}
return result;
}
재귀 함수의 예
 이진수 구하기
 예. 6(10)의 이진수를 구하여라.
6/2=3…0
3/2=1…1
1/2=0…1
void binary(int n)
{
int quotient = 0; // 몫
int remainder = 0; // 나머지
if(n > 0) { // if 몫>0 then 몫/2
remainder = n % 2;
quotient = n / 2;
binary(quotient);
printf(“%d”, remainder);
}
}
if 몫 > 0
then 몫 / 2
if 몫 == 0
then end
재귀 함수의 예
 이진수 구하기 프로그램 소스
#include <stdio.h>
void binary(int n);
void main() {
int n=0;
printf("한 수를 입력하세요 : ");
scanf("%d", &n);
printf("%d 의 이진수 값은 ", n);
binary(n);
printf(“\n”);
}
void binary(int n)
{
int quotient = 0;
int remainder = 0
if(n > 0) {
remainder = n % 2;
quotient = n / 2;
binary(quotient);
printf(“%d”, remainder);
}
}
실습
구구단 프로그램
한 수를 입력받아 2단부터
입력받은 수까지의 구구단
을 출력하는 프로그램
구구단을 출력하는 함수
gugu() 는 재귀함수로 구
현