정보보안공부
python_day12_윤년구하기, 재귀함수 본문
함수와 if문을 배운것을 바탕으로 윤년구하는 함수를 만들어 사용해보자.
한가지 문제를 풀어보자
n과 x와 a를 입력하고 a에 입력한 a원소중 x보다 작은원소 검출
n과 x는 한가지 정수이고 a는 여러가지 정수가 될 수 있다. 파이썬에서는 변수에 값을 대입할때 x,y = 1,2 또는 x,y = [1,2] 또는 x,y = (1,2) 리스트형과 튜플형으로 변수에 값을 대입할 수 있다. split을 이용해 list형으로 바꾸고 input으로 입력받는 형태는 문자열이므로 정수로 바꿔준다.
a는 여러가지 정수를 입력받을수 있으므로 split으로 list형으로 분리한 a전체를 한꺼번에 정수형리스트로 바꿀수있다. 이때 list(map(int, a))를 이용한다.
for문을 사용해 문제를 풀어보자
-> a는 list형 이므로 for문을 이용해 a원소 한개씩 불러오고 불러온 원소를 x보다 작게 if문 조건을 사용한다.
while을 사용해서 문제를 풀어보자
-> while문의 경우 처음 i=0 부터 a의 원소갯수만큼 while문을 진행하는데 if문을 이용해 a의 원소가 x보다 작으면 print로 출력하고 i를 +1해준다.
***함수
재귀함수
- 자기 자신을 호출하는 함수
- 하향식
- 상향식 : 반복(loop) ex) while, for
ex)
def recursion_nth( n ) :
if n>0 :
recursion_nth(n-1)
print(n)
1. if 5>0 : recurion_nth(4) print(5)
2. if 4>0 : recurion_nth(3) print(4)
3. if 3>0 : recurion_nth(2) print(3)
4. if 2>0 : recurion_nth(1) print(2)
5. if 1>0 : recurion_nth(0) print(1)
6. if 0>0 :
꼬리 재귀함수
***함수
숫자로 표현 1번부터 4번까지 순서대로 실행
def recursion_nth( n ) : 함수는 return 만나거나, 더이상 실행할 문장없을때 종료
print(n) < - 3.
< - 함수의 끝(종료)
print("before::::") < - 1.
recursion_nth(5) < - 2.
print("after::::") < - 4.
< - 프로그램 종료.
--- 1부터 n 까지의 합
1. 재귀적 방법
def recursion_sum(n) :
if n > 0 :
return n + recursion_sum(n-1)
else :
return 0
print(recursion_sum(5))
n = 5
if 5 > 0 :
return 5 + recursion_sum( 4 ) -> return 5실행전에 recursion_sum(4)가 남아서 return실행 x
if 4 > 0 : -> return 5 + 10 에의해 15
return 4 + recursion_sum( 3 ) -> recursion_sum( 3 ) = 6, return 4 + 6 에의해 10
if 3 > 0 :
return 3 + recursion_sum( 2 ) -> recursion_sum( 2 ) = 3, return 3 + 3 에의해 6
if 2 > 0 :
return 2 + recursion_sum( 1 ) -> recursion_sum( 1 ) = 1, return 2 + 1 에의해 3
if 1 > 0 :
return 1 + recursion_sum( 0 ) -> recursion_sum( 0 ) = 0, return 1 + 0 에의해 1
else :
return 0
2. 꼬리 재귀를 이용한 방법
=> 재귀 방법을 이용할때 숫자가 커지면 공간을 많이 잡게되어 꼬리재귀가 유용하다.
def recursion_sum(total, n) :
if n > 0 :
return recursion_sum(total + n, n-1)
else :
return total
print(recursion_sum(0,5))
if 5 > 0 :
return recursion_sum(0+5,4)
if 4 > 0 :
return recursion_sum(5+4,3)
if 3 > 0 :
return recursion_sum(9+3,2)
if 2 > 0 :
return recursion_sum(12+2,1)
if 1 > 0 :
return recursion_sum(15,0)
else :
return total=15
또는
def taiL_recursion_sum( n ) :
def loop( total, n ) :
if n>0 :
return loop( total + n, n-1 )
else :
return total
return loop( 0, n )
print( tail_recursion_sum(5))
3. 루프를 이용한 방법
def loop_sum( n ) :
total = 0
while n > 0 :
total += n
n -= 1
return total
print(loop_sum(5))
'Language > python' 카테고리의 다른 글
python_day14_피보나치 수 (0) | 2017.02.09 |
---|---|
python_day13_재귀함수2_곱셈함수,지수함수 (2) | 2017.01.31 |
python_day11_파일 읽고 쓰기 (0) | 2017.01.31 |
python_day10_함수 (0) | 2017.01.25 |
python_day09_모듈,패키지 (0) | 2017.01.21 |