TIL)23.07.14(재귀함수)

주민·2023년 7월 14일
0

TIL

목록 보기
39/84

하루에 알고리즘 문제 하나씩 출고 팀원들이랑 리뷰를 하고 있다. 오늘은 리뷰하면서 들은 재귀함수에 대해 정리해보려 한다.

문제

  • 프로그래머스 - 팩토리얼

    i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 4 3 2 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.

  • 입출력 예
    3628800 >> 10
    7 >> 3

문제해결

값이 증가하면서 n의 값을 넘는 시점의 i 값의 -1을 가져옴
처음에는 정해진 i값이 없어서 while문을 사용하였으나 조건의 최대값이 3,628,800(10!) 이어서 최대값 10, for 문으로 계산하였다.

int a = 1;
int b = 1;
int answer = 0;
        
for(int i=1; i<=10; i++){
	a = a * b++; => a *= b++;로도 변경 가능
            
	if(n >= a){
    	answer = i;
		}
	}
return answer;
    }
}

위와 같이 풀고나서 팩토리얼 문제는 재귀함수로 푸는 것이 좋고 앞으로 사용할 일이 많다고 하여 내용을 찾아봤다.

재귀(Recursion)함수란?

  • 함수 안에 다시 함수를 호출하는 함수로 자신의 로직을 내부적으로 반복하다가, 일정한 조건이 만족되면 함수를 이탈하여 결과를 도출
    => 함수 A를 만들고 함수 A에서 A를 다시 호출하는 것

예제

  • 팩토리얼
class Solution{
 // 팩토리얼 을 구하는 함수
	public int factorial(int n){
    	return (n <= 1) ? n : factorial(n-1) * n;
    }
    
    public int Solution(int n){
    int answer = 0;
    for(int i = 1; i <= 10; i++){
    	if(factorial(i) <= n){
        	answer = i;
            }
    	}
        return answer;
    }

}

0개의 댓글

관련 채용 정보