🌻 JAVA/알고리즘, 자료구조

알고리즘 - 재귀 알고리즘 (feat. Factorial, Fibonacci)

2020. 11. 16. 17:02
목차
  1. 팩토리얼로 알아보는 재귀 알고리즘
  2. 피보나치로 알아보는 알고리즘
반응형

재귀(Recursion) 이란 무엇일까? 

어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.

"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어. 마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지. 그의 답은 대부분 옳았다고 하네.
그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어.

"재귀함수가 뭔가요?"
"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을...

출처 : namu.wiki/w/%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98

 

 

팩토리얼로 알아보는 재귀 알고리즘

 

먼저 팩토리얼 이란?

숫자 n이 주어졌을 때, n 부터 1까지의 곱의 결과를 뜻한다.

0! = 1
1! = 1
2! = 2 x 1
3! = 3 x 2 x 1
..
n! = n x (n-1) x  ...  x 1

 

 

 

이것을 트리 형태로 만들면, 아래의 그림과 같다.

자 그럼 이제 점화식이 보인다. 

if (n==1) 일 경우 ∫(n) = 1;
if (n==2) 일 경우 ∫(n) = 1;
n은 0보다 큰 양의 정수이다.

∫(n)=  n x ∫(n-1)

 

 

코드로 표현 해보자.

 

import java.util.Scanner;

public class Factorial_10872 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int result = factorial(N);
        System.out.println(result);
    }

    private static int factorial(int n) {
        if (n == 0) {
            return 1;
        }
        if (n == 1) {
            return 1;
        }
        return n * factorial(n - 1);
    }
}

 


 

피보나치로 알아보는 알고리즘

 

피보나치 수열이란?

출처 : ko.wikipedia.org/wiki/%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98_%EC%88%98

 

피보나치 수열을 한번 자세히 보자.

 

점화식을 작성 해 보자.

if(n==0 ) 일때, ∫(0) = 0;
∫(1) = 1;
∫(2) = 1;

n > 2 를 만족하는 양의 정수에 대하여

∫(n)=  ∫(n-1) + ∫(n-2)

 

코드로 작성하면,

import java.util.Scanner;

public class Fibonacci {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int result = fibonacci(N);
        System.out.println(result);
    }

    private static int fibonacci(int n) {
        if (n == 0) {
            return 0;
        }
        if (n == 1) {
            return 1;
        }
        if (n == 2) {
            return 1;
        }
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
반응형
저작자표시 (새창열림)
  1. 팩토리얼로 알아보는 재귀 알고리즘
  2. 피보나치로 알아보는 알고리즘
'🌻 JAVA/알고리즘, 자료구조' 카테고리의 다른 글
  • 알고리즘 - BFS(너비 우선 탐색), DFS(깊이 우선 탐색)
  • 알고리즘 - 백트래킹(Back-Tracking)
  • 알고리즘 - Merge Sort (분할 정복, 병합 정렬)
  • 알고리즘 - Counting Sort (카운팅 정렬 / 계수 정렬) 알고리즘
iseunghan
iseunghan
꾸준하게 열심히..
iseunghan
iseunghan

공지사항

  • 어제보다 나은 오늘이 되기 위해 🔥
  • 분류 전체보기 (262)
    • 💐 Spring (14)
      • 개념 및 이해 (2)
      • Spring 핵심 기술 (24)
      • Spring REST API (8)
      • Spring MVC, DB 접근 기술 (7)
      • Spring Security (23)
      • Spring in Action (1)
    • 🌻 JAVA (84)
      • 자바 ORM 표준 JPA 프로그래밍 (20)
      • 알고리즘, 자료구조 (13)
      • 디자인 패턴 (7)
      • 정리정리정리 (43)
      • JUnit (1)
    • 🔖 Snippets (3)
      • Javascript (3)
    • ⚙️ Devops (22)
      • ⛏ Git (11)
      • 🐳 Docker (6)
      • 🐧 Linux (3)
      • 🌈 Jenkins (1)
      • 📬 Kafka (1)
    • 💬 ETC.. (4)
      • 💻 macOS (2)
    • 🌧️ ORM (2)
      • JPA (2)
    • 🐍 Python (3)
    • 📚 Databases (15)
      • 오라클로 배우는 데이터베이스 개론과 실습(2판) (3)
      • RealMySQL 8.0 (8)
    • 🔥 Computer Science (5)
      • 📡 네트워크 (5)
    • 🏷️ 협업 (1)
    • 📜 코딩테스트 (38)
      • BAEKJOON\수학 1, 수학 2 (8)
      • BAEKJOON\재귀 (5)
      • BAEKJOON\브루트 포스 (3)
      • BAEKJOON\정렬 (1)
      • BAEKJOON\백트래킹 (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\이분탐색 (1)
      • BAEKJOON\다이나믹 프로그래밍 (9)
      • BAEKJOON\그리디 알고리즘 (0)
    • ✨ ISEUNGHAN (1)

인기 글

전체
오늘
어제
반응형
hELLO · Designed By 정상우.
iseunghan
알고리즘 - 재귀 알고리즘 (feat. Factorial, Fibonacci)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.