250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- sql자격증
- SQLD
- 클라우데라자격증
- hive
- EC2
- 쉘스크립트
- hadoop
- Multi Factor Authentication
- Identity and access management
- CCAAdministrator
- SQL
- IAM
- 하둡
- mysql
- RDBMS
- programmers
- 파이썬
- 리눅스
- 코딩테스트
- 프로그래머스
- MFA
- CLF-01
- 클라우드자격증
- AWSCloudPractitioner
- 빅데이터실무자격증
- AWS자격증
- 클라우드컴퓨팅
- 빅데이터
- 데이터베이스
- CCA131
Archives
- Today
- Total
Sherry IT Blog
python 재귀알고리즘 (Recursive Algorithms) 본문
728x90
반응형
재귀함수에 의해 구현이 되는 알고리즘
재귀함수란 ?(recursive functions)- 하나의 함수에서 자신을 다시 호출해서 작업을 수행하는 것을 말한다.
생각보다 많은 종류의 문제가 재귀적으로 해결가능하다고한다.
#재귀적인버전(Recursive version)
#O(n)
def sum(n):
if n<=1:
print("n :: ",n)
return n
else:
print(n)
return n + sum(n-1)
a = int(input("Number : "))
print(sum(a))
출력
n이 1이되면 n+(n-1)이 아닌 n을 반환하기 때문에 -값을 반환하지 않게됨(종결조건)
#반복적인 버전(lterative version)
#O(n)
def sum(n):
s=0
while n >=0:
s+=n
n-=1
print("s :",s ,"| n ::",n)
return s
a = int(input("Number:: "))
print(sum(a))
출력
보기쉽게 s와 n을 찍어봤다.
s는 4+3+2+1을 누적하는 값을 담은 변수이고
n은 입력값에서 -1 되는 변수 n+(n-1)
n이 0 이하일때 while 문이 종료되기 때문에 n값을 더한 10 출력
알고리즘 복잡도는 O(n)으로 둘다 동일하지만
알고리즘의 효율성 측면에서는 첫번째버전(Recursive version)이 n이 증가할때마다 함수를 호출을 해야해서 효율성이 떨어짐
*재귀함수로 구현하는 팩토리얼 문제
N!=NX(N-1)X(N-2)X(N-3).......
0!=1
1!=1X(1-1)=1X0!=1
2!=2X1
3!=3X2X1
#n! 구하는 함수 예시
def factorial(n):
if n <=1:
return 1 #마지막 X1을 위해 1 리턴
else:
print("n :",n)
return n*factorial(n-1)
a = int(input("Number :: "))
print(factorial(a))
출력
리턴에서 자기자신을(factorial함수) 다시불러서 n-1 값을 넣어 연산
팩토리얼을 마지막에 x1로 끝나기 때문에 n값이 1이 됐을때는 1을 리턴한다.
이렇게 짧게도 구현가능
def factorial(n):
return n * factorial(n-1) if n > 1 else 1
a = int(input("Number :: "))
print(factorial(a))
+재귀함수가 아닌 for문을 이용한 방법
작년 코테때 for문으로 구현했었는데 재귀함수를 알고나니 for문 구현방식이 더 복잡하게 느껴짐...
728x90
반응형
'Python > coding test_Algorithm' 카테고리의 다른 글
기본적으로 알아야하는 알고리즘 목록 (0) | 2021.11.03 |
---|---|
[programmers]이진탐색 (0) | 2021.09.17 |
[programmers]리스트에서 원소 찾아내기 (0) | 2021.09.15 |
[programmers]정렬된 리스트에 원소 삽입_삽입정렬 (0) | 2021.09.15 |
[programmers]리스트 원소와 합 (0) | 2021.09.15 |
Comments