[Python]재귀 호출(recursive call)

개린이·2023년 9월 10일
0

Python

목록 보기
11/20
post-thumbnail

재귀 호출(recursive call)

재귀 호출(recursion)은 함수가 자기 자신을 다시 호출하는 기법을 말한다. 재귀 호출을 사용하면 복잡한 문제를 간단하고 우아하게 풀 수 있지만, 잘못 사용하면 프로그램의 성능에 문제가 발생할 수 있다.

  1. 무한재귀 : 재귀 함수의 기본 케이스가 없거나 잘못되면 함수는 무한히 자신을 호출하게 됩니다. 이렇게 되면 프로그램은 결국 스택 오버플로우 에러를 발생시기케 된다

    스택오버플로우(Stack Overflow) : 용량 제한으로 더 이상 원소를 추가하지 못할 때 발생한다

  2. 성능 : 모든 재귀 호출은 호출 스택에 저장된다. 따라서 많은 재귀 호출이 발생하면 메모리 사용량이 증가하게 된다.

  3. 가독성 : 일부 사람들에게는 재귀 코드가 복잡하게 느껴질 수 있다.

🖥️예제

def factorial(num):
    if num > 1:
        return num * factorial(num - 1)
    else:
        return num
factorial(4)
print(factorial(1))
print(factorial(2))
print(factorial(3))
print(factorial(4))

def palindrome(string):
    if len(string) <= 1:
        return True
    if string[0] == string[-1]:
        return palindrome(string[1:-1])
    else:
        return False
print(palindrome('역삼역'))
print(palindrome('배고파'))

문제

정수 n을 입력받아 아래와 같이 처리하는 프로그램을 만들어보자.

  • n이 홀수면 3*N+1을 함
  • n이 짝수면 n을 2로 나눔
  • 이렇게 계속 진행해서 n이 결국 1이 될때까지 위 조건을 반복하여 실행

def calculation(num):
    num = int(num)
    print(num) #num을 출력
    if num == 1:
        return print('끝') #만약에 num이 1이라면 '끝'을 출력하고 탈출

    if num % 2 == 1: # num이 홀수라면 3*num+1을 하고
        return calculation(3 * num + 1)

    else: # 짝수라면 num / 2로 계산해라
        return calculation(num / 2)
calculation(input('숫자를 입력하세요 '))

0개의 댓글

관련 채용 정보