정보보안공부

python_day12_윤년구하기, 재귀함수 본문

Language/python

python_day12_윤년구하기, 재귀함수

Steady_sp 2017. 1. 31. 16:18

함수와 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
Comments