⇒ 1. 반복문으로 팩토리얼 구하기.
⇒ 2. 재귀 함수로 팩토리얼 구하기.
# 함수를 선언.
def factorial(n):
# 변수를 선언.
output = 1
# 반복문을 돌려 숫자를 더함.
for i in range(1, n + 1):
output *= i
# 리턴.
return output
# 함수를 호출.
print('1!:', factorial(1))
print('2!:', factorial(2))
print('3!:', factorial(3))
print('4!:', factorial(4))
print('5!:', factorial(5))
factorial(n) = n * factorial(n - 1) (n >= 1 일때)
factorial(0) = 1
f(4) = 4 * f(3)
= 4 * 3 * f(2)
= 4 * 3 * 2 * f(1) * f(0)
= 4 * 3 * 2 * 1 * 1
# 함수를 선언.
def factorial(n):
# n이 0이라면 1을 리턴.
if n == 0:
return 1
# n이 0이 아니라면 n * (n - 1)!을 리턴.
else:
return n * factorial(n - 1)
# 함수를 호출.
print('1!:', factorial(1))
print('2!:', factorial(2))
print('3!:', factorial(3))
print('4!:', factorial(4))
print('5!:', factorial(5))
# 함수를 선언.
def fibonacci(n):
if n == 1:
return 1
if n == 2:
return 1
else:
return fibonacci(n -1) + fibonacci(n - 2)
# 변수를 선언.
counter = 0
# 함수를 선언.
def fibonacci(n):
# 어떤 피보나치 수를 구하는지 출력.
print('fibonacci({})를 구합니다'.format(n))
global counter
counter += 1
# 피보나치 수를 구함.
if n == 1:
return 1
if n == 2:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
# 함수를 호출.
fibonacci(10)
print('---')
print('fibonacci(10) 계산에 활용된 덧셈 횟수는 {}번입니다.'.format(counter))
재귀 함수를 사용하면서 코드가 빠르게 실행되려면?
같은 값을 한번만 계산하도록 코드를 수정.
# 메모 변수를 만듦.
dictionary = {
1 : 1,
2 : 2
}
# 함수를 선언.
def fibonacci(n):
if n in dictionary:
# 메모가 되어 있으면 메모된 값을 리턴.
return dictionary[n]
else:
# 메모가 되어 있지 않으면 값을 구함.
output = fibonacci(n - 1) + fibonacci(n - 2)
dictionary[n] = output
return output
# 함수를 호출.
print('fibonaccil(10) : ', fibonacci(10))
print('fibonaccil(20) : ', fibonacci(20))
print('fibonaccil(30) : ', fibonacci(30))
print('fibonaccil(40) : ', fibonacci(40))
print('fibonaccil(50) : ', fibonacci(50))
람다 : 기능을 매개변수로 전달하는 코드를 더 효율적으로 작성.
함수의 매개변수로 함수 전달.
# 매개변수로 받은 함수를 10번
def call_10_times(func):
for i in range(10):
func()
# 간단한 출력.
def print_hello():
print('안녕하세요')
# 조합
call_10_times(print_hello)
map(함수, 리스트)
filter(함수, 리스트)
def power(item):
return item * item
def under_3(item):
return item < 3
# 변수를 선언.
list_input_a = [1,2,3,4,5]
# map() 함수를 사용.
output_a = map(power, list_input_a)
print('# map() 함수의 실행결과')
print('map(power, list_output_a):', output_a)
print('map(power, list_output_a):', list(output_a))
print()
#filter() 함수 사용.
output_b = filter(under_3, list_input_a)
print('# filter() 함수의 실행결과')
print('filter(under_3, output_b) :', output_b)
print('filter(under_3, output_b) :', list(output_b))
lambda 매개변수 : 리턴값.
power = lambda x: x * x
under_3 = lambda x: x < 3
# 변수를 선언.
list_output_a = [1,2,3,4,5]
#map()함수 사용.
output_a = map(power, list_input_a)
print('#map() 함수의 실행결과')
print('map(power, list_output_a):', output_a)
print('map(power, list_input_a:', list(output_a))
print()
#filter() 함수 사용.
output_b = filter(under_3, list_input_a)
print('# filter(*) 함수의 실행결과')
print('filter(under_3, output_b : ', output_b)
print('filter(under_3, output_b): ',list(output_b))
함수의 매개변수에 람다 곧바로 넣을 수 있음.
# 변수를 선언.
list_output_a = [1,2,3,4,5]
# map() 함수를 사용.
output_a = map(lambda x: x * x, list_input_a)
print(' # map() 함수의 실행결과')
print('map(power, list_input_a):', output_a)
print('map(powerm list_input_a):', list(output_a))
# filter() 함수의 사용.
output_b = filter(lambda x : x < 3, list_output_a)
print('# filter() 함수의 실행결과')
print('filter(under_3, output_b):', output_b)
print('filter(under_3, output_b):', list(output_b))
lambda x, y : x * y
# 함수를 선언.
def fibonacci(n):
if n in dictionary:
return dictionary[n]
else:
output = fibonacci(n - 1) + fibonacci(n - 2)
dictionary[n] = output
return output
def fibonacci(n):
if n in dictionary:
return dictionary[n]
output = fibonacci(n - 1) + fibonacci(n - 2)
dictionary[n] = output
return output
def number_generator():
yield 0
yield 1
yield 2
for i in number_generator():
print(i)
def reverse(n):
n = str(n)
return (n[::-1])
def isPalindrome(n):
n = str(n)
if n == reverse(n):
print(True)
print('대칭수 입니다.')
else:
print(False)
print(reverse(n))
n = input('number : ')
isPalindrome(n)