본문 바로가기

나 취준생/파이썬

재귀함수

320x100

재귀 함수 : 반복문 + 스택 구조의 결합

(나중에 들어간게 먼저 나오는 구조)


재귀 함수의 특징 : 재귀 함수는 함수 내에서 다시 자기 자신을 호출한 후

그 함수가 끝날 때까지 함수 호출 이후의 명령문을 수행하지 않는다.


재귀 함수의 장점 :

1. loop문을 별도로 작성하지 않아도 된다.

2. 코드가 간결해진다.



1
2
3
4
5
6
7
8
9
def hap(a,b):
    return (a+b)
def gob(a,b):
    return (a*b)
def hap_gob(a,b):
    k=hap(a,b) #5
    m=gob(a,b) #6
    return k+m
print(hap_gob(2,3)) #11



위처럼 파이썬은 함수 내에서 다른 함수를 불러오는 것이 가능하다.

재귀 함수는 다른 함수가 아닌 자기 자신을 불러오는 것




# 재귀 함수를 통해 1까지의 합 출력하기


1
2
3
4
5
6
def add_func(n):
    if n<=1: # 1보다 이하면 끝
        return n
    else:
        return n+add_func(n-1)
print(add_func(3)) # 3+2+1=6



add_func(3) = 3 + add_func(2)


2 + add_func(1)


   1


add_func(3)= 3+ 2 + 1 = 6



# 팩토리얼 함수 만들기


1
2
3
4
5
6
def factorial(n):
    if n==0 or n==1:
        return 1
    else:
        return n*factorial(n-1)
print(factorial(5)) #120


아까와 비슷하지만 n일 때 팩토리얼 값은 1이 나오므로 조금만 바꿔주면 된다.


재귀 함수를 작성할 때 항상 loop문 역할을 하는 코드가 나오기 전

재귀 함수를 계속 돌다가 마지막에 재귀를 끝낼 조건을 맨 앞에 작성해두어야 한다.

그래야 무한 루프가 돌지 않는다.



# 제곱 함수 만들기


1
2
3
4
5
6
def power(n,m):
    if m==0:
        return 1
    else:
        return n*power(n,m-1)
print(power(5,3)) #125



이런 함수를 만들지 않아도 pow() 함수가 있으니 그걸 사용하면 된다.


# 구구단 만들기


1
2
3
4
5
6
7
def multi_table_2dan(n):
    if n==1:
        return '2 x '+str(n)+' = '+str(2*n)
    else:
        print('2 x '+str(n)+' = '+str(2*n))
        return multi_table_2dan(n-1)
print(multi_table_2dan(9))





거꾸로지만.. 재귀니까 별 수 없지않..을까?



# 구구단 제대로 출력


1
2
3
4
5
6
7
def multi_table_2dan(n):
    if n==1:
        return '2 x '+str(10-n)+' = '+str(2*(10-n))
    else:
        print('2 x '+str(10-n)+' = '+str(2*(10-n)))
        return multi_table_2dan(n-1)
print(multi_table_2dan(9))



n 대신 10-n으로 뒤집고
n을 1씩 줄이니까 됐다.



반응형

'나 취준생 > 파이썬' 카테고리의 다른 글

자카드 유사도 + 카카오 문제  (0) 2020.12.24
LRU 알고리즘 + 카카오 문제  (0) 2020.12.23
탐욕 알고리즘  (0) 2020.12.23
버블 정렬  (0) 2020.12.23
이진 탐색  (0) 2020.12.22