Python/개념

2024-03-29 재귀 호출

nomad06 2024. 3. 29. 09:48

1. 재귀 호출(recursive call)

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

 

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

성능: 재귀 호출은 간단하고 우아하게 보일 수 있지만, 반복문을 사용한 코드보다 더 많은 메모리와 시간을 소모할 수 있습니다. 특히 파이썬에서는 재귀 호출에 제한이 있으므로 (기본적으로 1000번) 큰 입력값에 대해 재귀 함수를 사용하면 문제가 발생할 수 있습니다.

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

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

 

def factorial(num):
  if num > 1:
    return num * factorial(num - 1)
  else:
    return num
    
for num in range(5):
  print(factorial(num))

 

def palindrome(string):
  if len(string) <= 1:        
    return True
  if string[0] == string[-1]:
    return palindrome(string[1:-1])
  else:
    return False

 

# 내 풀이
def test(n):

    if n % 2 == 1 and n != 1:
        print(n)
        return test(3*n +1)

    elif n % 2 == 0:
        print(n)
        return test(n/2)

    else:
        print(n, '끝')