Loading

블로그채널

Search !

[PHP] 강좌 #15 함수 및 재귀형 Recursive Function


이번시간에는 함수에 대해 설명하겠습니다.


PHP 5 Functions


수학시간에 함수 많이 사용했어요. ‘y = 2x + 1’ 이런 함수 기억나시죠? 프로그래밍 언어에서도 위와 유사합니다. 프로그래밍 언어에서 더 부각되는 것은 바로 재사용성(Reusability)입니다. 한번 작성한 코드 다시 사용할 수 있으면 좋겠죠?

 

[PHP] 강좌 #15 함수 및 재귀형 Recursive Function

[PHP] 강좌 #15 함수 및 재귀형 Recursive Function

 


 

 

예를 들어서 5!(팩토리얼)을 계산하는 코드를 작성했어요.

 

[예제1]
$result = 1;
for ($i = 1; $i <= 5; i++) { 
    $result = $result * $i;
}
echo $result;

 

[계산 과정]
$result = $result * $i;
1 = 1 * 1;
2 = 1 * 2;
6 = 2 * 3;
24 = 6 * 4;
120 = 24 * 5;

 

[계산 결과]
120

 

결국 120에는 “120 = 5 * 4 * 3 * 2 * 1”이 들어 있습니다. 
 

PHP 함수 및 재귀형 Recursive Function

PHP 함수 및 재귀형 Recursive Function

 

 

이 코드가 매번 나온다면 위 코드를 매번 복사해야 합니다. 게다가 다른 프로그램을 작성한다고 하면 코드를 매일 다른 곳에서 복사해서 붙여넣기 해야 합니다. 매우 귀찮아요. 위 코드를 재활용하고 싶습니다. 그걸 가능하게 해주는 게 함수입니다. 코드를 매번 복사해야하는 불편함을 덜어주는 거죠.
 
위 코드를 편하게 fact(5); 라고 하면 그 결과 값이 나왔으면 좋겠어요. 위 코드로 함수를 작성하면 아래와 같습니다.

[함수 작성 전 코드]
$result = 1;
for ($i = 1; $i <= 5; i++) { 
    $result = $result * $i;
}
echo $result;
 
[함수 작성 후 코드]
function fact($n) {
    $result = 1;
    for ($i = 1; $i <= $n; $i++) {
        $result = $result * $i;
    }
    return $result;
}
echo fact(5);

 

이제 우리는 fact(5)만 호출하면 그 결과값을 얻을 수 있어요. 매우 편리해졌네요. 

 

Syntax
function functionName(함수 인지값) {
    실행코드;
    return 값; // 결과 값을 되돌려줄 때 사용
}

 

우리가 만든 함수 이름은 fact입니다. 함수 인자값이 하나만 필요해서 함수 인자값 안에 변수 $n 하나만 넣었어요. 2개가 필요하면 인자값 2개를 넣으면 됩니다. 아래 덧셈 코드처럼 $x와 $y를 넣어주면 됩니다. 결과 값이 필요하면 return을 사용하면 됩니다.  

 

 

function add($x, $y) {
    $result = $x+$y; return $result;
}

 

함수를 작성하는데 어렵지 않죠?
 
수학적 관점에서 보면 fact(n) 함수는 다음과 같습니다.

 

fact(n) = n * fact(n-1);

fact(1)는 1이다.

 

fact(3)을 계산하면
fact(3) = 3 * fact(2);
fact(2)가 호출되겠죠?
fact(2) = 2 * fact(1); fact(1)이 호출되겠죠?
fact(1) = 1;

fact(1)값 1이 리턴되어서 fact(2) = 2*1 이 되고
fact(2)값 2가 리턴되어 fact(3) = 3*2가 됩니다.
따라서 fact(3)은 6이 됩니다. 

 

위 수학 식을 그대로 표현해서 만들면 다음과 같이 함수를 만들 수 있어요. 매우 간단하죠? 아래와 같은 함수를 재귀형 함수(Recursive Function)라고 부릅니다.

 

[함수형 언어처럼 표현하기]
function fact($n) {
    if ($n == 1) return 1;
    return $n *fact($n-1);
}

 

위와 같은 방식이 함수형 언어의 기본이 된답니다. for문처럼 반복 작업을 하지 않고 함수를 계속 호출하면서 반복 작업을 합니다. 옛날에는 속도 때문에 수학적 표현 즉 재귀형 함수를 사용할 수 없었습니다. 하지만 요즘은 수학적 표현이 기본이 되는 함수형 언어가 필요한 시대에 살고 있어요.^^
 
PHP에서는 편리한 개발을 위해 자주 사용하는 함수를 미리 만들어 놓았습니다. 이런 함수를 내장 함수(Built-in Function)라고 부릅니다. 사용자가 직접작성하는 함수는 사용자 함수(User Defined Function) 현재 시간을 알고 싶으면 date() 함수를 사용하면 됩니다.

 

[예제 코드]
echo date("h:i:s"); // h:시, i:분 s:초

 

[출력 결과]
12:27:56


이번 시간 꽤 흥미로운 주제였는데 재미있으셨나요? 다음시간에는 Array 배열을 다루어보도록 하겠습니다. 수고 많으셨어요.^^