하루에 알고리즘 문제 하나씩 출고 팀원들이랑 리뷰를 하고 있다. 오늘은 리뷰하면서 들은 재귀함수에 대해 정리해보려 한다.
프로그래머스 - 팩토리얼
i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 4 3 2 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.
값이 증가하면서 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;
}
}
위와 같이 풀고나서 팩토리얼 문제는 재귀함수로 푸는 것이 좋고 앞으로 사용할 일이 많다고 하여 내용을 찾아봤다.
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;
}
}