Algorithm

재귀함수 그게 뭐죠? 일반함수의 리턴 과정과 비교했다

Ofglen 2023. 4. 9. 17:01

프로그래머스 문제를 풀려고 하면 기본으로 함수를 만들어놨다.

 

 

이게 뭐죠...

 

문제 풀이에 이 함수를 써서 코드를 짜라는 것 같은데...

흐린 눈 하고 함수 안 쓰고 풀다가^^

그래 하라는데로 해야지... 함수 써서 풀어보려고 정리하는 도중에 재귀함수라는 단어가 많이 나와서 정리했다.

 

함수

우선 함수를 사용하는 이유는 프로그램의 기능별로 단위를 나눠주기 위함이다.

파이썬은 예약어 def를 사용해서 함수를 만듦

기본적으로 아래 형태다.

 

# 일반 함수
def 함수명(파라미터):
    # 수행할 문장1
    # 수행할 문장2
    ...
    return

 

def add(x, y):

    result = x + y

    return result
   
add(3, 6)

공부하면서 새로운 용어들이 계속 나온다.

새로운 용어가 나오면... 한자를 몰라서 차라리 영어가 더 쉽다ㅠ

 

함수 용어
인수(argument) - 함수가 호출될 때 함수에게 전달하는 값
매개변수(parameter) - 함수에 전달된 값을 함수 내부로 전달하는 변수

 

 

따라서 함수의 형태 아래와 같음

입력값 ---> 함수 ----> 리턴값
           인수    파라미터

 

일반 함수의 리턴 과정 (http://10bun.tv/beginner/episode-4/#%E1%84%80%E1%85%A1%E1%86%BC%E1%84%8B%E1%85%B4-%E1%84%80%E1%85%A2%E1%84%8B%E1%85%AD)

 

 

재귀 함수

재귀함수는 자기 자신을 호출하는 함수다. 함수 안에서 다시 함수를 호출할 수 있다.

반복문이랑 같은 기능을 한다.

스택도 구현할 수 있다. 재귀함수를 연속적으로 호출하면 메모리 스택에 쌓이기 때문~!

 

 

일반적으로 이런 모양새다.

 

def function(n):
    if n == 0:
        return
    else:
        function(n-1)
        print(n)

 

 

 

 

종료조건 if

재귀함수에 종료조건을 기재하지 않으면 스택 넘침 현상이 발생한다. (무한 재귀)

파이썬에서는 무한 반복이 되면 오류가 발생하면서 실행이 중지되어 버림

 

재귀호출과 스택 넘침 현상(https://dojang.io/mod/page/view.php?id=2352)

 

 

그래서 보통 if문으로 종료조건을 넣어줌...

 

 

 

반환값 return

return값도 넣어줘야 한다.

return문으로 함수를 실행 -> 처리하고 나온  결과를 반환하고 함수 실행이 종료된다.

리턴문이 없으면 결과를 반환하지 못한 채 함수가 종료되기 때문에

함수는 아무것도 없는 빈 값인 None이 찍힘

 

재귀함수의 리턴 과정 (http://10bun.tv/beginner/episode-4/#%E1%84%8B%E1%85%B5%E1%86%AF%E1%84%87%E1%85%A1%E1%86%AB%E1%84%8C%E1%85%A5%E1%86%A8%E1%84%8B%E1%85%B5%E1%86%AB-%E1%84%92%E1%85%A1%E1%86%B7%E1%84%89%E1%85%AE-%E1%84%92%E1%85%A9%E1%84%8E%E1%85%AE%E1%86%AF-%E1%84%86%E1%85%B5%E1%86%BE-%E1%84%85%E1%85%B5%E1%84%90%E1%85%A5%E1%86%AB-%E1%84%80%E1%85%AA%E1%84%8C%E1%85%A5%E1%86%BC)