강잇
강이의 개발블로그
강잇
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • Langauge (32)
      • Java-basic (29)
      • Java (3)
    • SpringBoot (7)
    • Algorithm (5)
      • BAEKJOON (5)
    • WEB (7)
      • HTML & CSS (7)
    • DB (1)
      • MySQL (1)
    • OS (17)
      • Mac (2)
      • Linux (4)
      • Terminal Command (11)
    • Computer Science (7)
      • Hard ware (1)
      • Database (1)
      • Data structure (2)
      • Algorithm (2)
      • Network (1)
    • Git (5)
      • 개념 (1)
      • 활용 (1)
      • Trouble Shooting (2)
    • ETC. (13)
      • Install (6)
      • IntelliJ (1)
      • Eclipse (2)
      • Error (3)
      • Tip (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바
  • CSS 속성
  • 메소드
  • 백준
  • 메서드
  • CSS 박스 크기 설정
  • 알고리즘 공부
  • til

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
강잇

강이의 개발블로그

Computer Science/Algorithm

[Java] 팩토리얼 [Factorial] 구현

2022. 8. 1. 16:32

팩토리얼이란

  • 팩토리얼이란 한글로 '계승'을 뜻하며 1에서 n까지의 모든 자연수를 곱하는 것을 의미한다.
  • 팩토리얼은 ! 기호로 표기한다.
  • ex. 3! = 1 * 2* 3 = 6 // 4! = 1 * 2* 3* 4 = 24

팩토리얼 구현 - 반복문

  1. 인자로 정수 n을 받음.
  2. 곱셈 연산의 결과를 저장할 result 변수 선언 후 1로 초기화
  3. for문을 사용하여 초기식, 조건식, 증감식은 다음과 같이 작성함.
  4. 첫 번째 반복 : result = result * i(1) -> 1 * 1
  5. 두 번째 반복 : result = result * i(2) -> 1 * 2
  6. 세 번째 반복 : result = result * i(3) -> 2 * 3
  7. ...
  8. n 번째 반복 : result = result * i(n) -> (n-1)! * n
class Factorial {
    public int factorial(int n) {
        int result = 1;
        for (int i = 1; i <= n; i++){
            result *= i;
        }
        return result;
    }
}

팩토리얼 구현 - 재귀

  1. factorial(n)이 호출되어 n이 0보다 크다면 n * factorial(n - 1)을 반환
  2. 위의 곱셈 연산을 수행하기 위해 factorial(n - 1)을 호출한다.
  3. factorial(n - 1)이 호출되어 다시 n - 1의 값이 0보다 크다면 (n - 1) * factorial((n - 1) - 1)을 반환
  4. 위의 곱셈 연산을 수행하기 위해 factorial((n - 1) - 1)을 호출한다.
  5. factorial((n - 1) - 1)이 호출되어 다시 ((n - 1) - 1)의 값이 0보다 크다면 ((n - 1) - 1) * factorial(((n - 1) - 1) - 1)을 반환
  6. 위의 곱셈 연산을 수행하기 위해 factorial(((n - 1) - 1) - 1)을 호출한다.
  7. 위의 과정이 계속 반복되다가 n이 0보다 크다는 조건이 false일 때 1을 리턴하며 위에서 대기 중인 곱셈 연산을 수행하기 위해 올라간다.
class Factorial {
    public int factorial(int n) {
        return n > 0 ? n * factorial(--n) : 1;
        /*
        if (n < 0) {
            return 1;
        }
        return n * factorial(n - 1);
        */
    }
}

 

 

저작자표시 (새창열림)

'Computer Science > Algorithm' 카테고리의 다른 글

[Java] 재귀  (0) 2022.07.31
    'Computer Science/Algorithm' 카테고리의 다른 글
    • [Java] 재귀
    강잇
    강잇
    학습한 내용을 정리 및 기록하는 블로그

    티스토리툴바