def factorial(num):
if num > 1:
return num * factorial(num - 1)
else:
return num
for num in range(10):
print (factorial(num))
# 일반적인 형태1
def function(입력):
if 입력 > 일정값: # 입력이 일정 값 이상이면
return function(입력 - 1) # 입력보다 작은 값
else:
return 일정값, 입력값, 또는 특정값 # 재귀 호출 종료
# 일반적인 형태2
def function(입력):
if 입력 <= 일정값: # 입력이 일정 값보다 작으면
return 일정값, 입력값, 또는 특정값 # 재귀 호출 종료
function(입력보다 작은 값)
return 결과값
# 테스트
def factorial(num):
if num <= 1:
return num
return num * factorial(num - 1)
for num in range(10):
print (factorial(num))
0
1
2
6
24
120
720
5040
40320
362880
function multiple(n) {
if (n <= 1) {
return n;
}
let result = 1;
for (let i = 1; i <= n; i++) {
result *= i;
}
return result;
}
let r1 = multiple(5);
console.log(r1);
function rMultiple(n) {
if (n <= 1) {
return n;
}
return n * rMultiple(n - 1);
}
let r2 = multiple(5);
console.log(r2);
# for문 사용하여 구현
def multiple(n):
result = 1
for i in range(1, n+1):
result = result * i
return result
multiple(4)
# 재귀함수 사용하여 구현
def multiple(n):
if n <= 1:
return n
return n * multiple(n-1)
multiple(4)
function totalArray(arr) {
let result = 0;
for (let i = 0; i < arr.length; i++) {
result += arr[i];
}
return result;
}
let r1 = totalArray([1, 2, 3, 4, 5, 6]);
console.log(r1);
function rTotalArray(arr, i = 0) {
let result = 0;
if (i == 0) {
return arr[0];
}
return arr[i] + rTotalArray(arr, i - 1);
}
let r2 = rTotalArray([1, 2, 3, 4, 5, 6], 5);
console.log(r2);
function sumList(data) {
let result = 0;
if (data.length <= 1) {
return data[0];
} else {
return data[0] + sumList(data.slice(1));
}
}
let r3 = sumList([1, 2, 3, 4, 5, 6]);
console.log(r3);
def sumList(data):
result = 0
if len(data) <= 1:
return data[0]
else:
return data[0] + sumList(data[1:])
import random
data = random.sample(range(100), 3)
print(data)
sumList(data)
[84, 7, 68]
159
function palindrome1(arr) {
if (arr.length === 1) {
return true;
}
if (arr[0] === arr[arr.length - 1]) {
return palindrome1(arr.slice(1, -1));
} else {
return false;
}
}
let r1 = palindrome1("hello");
console.log(r1);
let r2 = palindrome1("hoasdflfdsaoh");
console.log(r2);
리스트 슬라이싱을 활용
```
string = 'Dave'
string[-1] --> e
string[0] --> D
string[1:-1] --> av
string[:-1] --> Dav
```
def palindrome(textList):
if len(textList) <= 1:
return True
if textList[0] == textList[-1]:
return palindrome(textList[1:-1])
else:
return False
textList = ['m', 'o', 't', 'o', 'r']
palindrome(textList)
# False
textList = ['m', 'i', 'o', 't', 'o', 'i', 'm']
palindrome(textList)
# True
textList = ['m', 'i', 'o', 'o', 'i', 'm']
palindrome(textList)
# True
function func(n) {
console.log(n);
if (n <= 1) {
return;
}
if (n % 2 === 0) {
return func(n / 2);
} else {
return func(3 * n + 1);
}
}
let r1 = func(100);
console.log(r1);
# 3입력시 결과
3
10
5
16
8
4
2
1
def func(n):
print(n)
if n <= 1:
return n
if n % 2 == 0:
return func(int(n/2))
else:
return func(3*n+1)
func(3)
패턴 분석
패턴 정리
정리해보면 f(n)은 1, 2, 3이 입력되었을때를 제외하고 4 이상일 경우 다음의 패턴을 갖는다.
패턴: f(n-1) + f(n-2) + f(n-3)
코드 구현
function func(n) {
if (n <= 1) {
return 1;
}
if (n == 2) {
return 2;
}
if (n == 3) {
return 4;
}
return func(n - 1) + func(n - 2) + func(n - 3);
}
let r1 = func(1);
console.log(r1);
r1 = func(2);
console.log(r1);
r1 = func(3);
console.log(r1);
r1 = func(5);
console.log(r1);
r1 = func(6);
console.log(r1);
r1 = func(7);
console.log(r1);
r1 = func(8);
console.log(r1);
r1 = func(10);
console.log(r1);
def func(n):
if n == 1:
return n
elif n == 2:
return 2
elif n == 3:
return 4
return func(n-1) + func(n-2) + func(n-3)
func(5)
13
func(6)
24
func(7)
44
func(8)
71
func(10)
274