We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
과연 재귀함수가 좋을까 반복 loop가 좋을까?
함수형 프로그래밍을 지향하기 위해서는, 함수나 메소드 내부에서는 참조 투명성을 준수하고, 예외 지양, 재귀를 지향하라고 했다. 재귀롤 사용하는 게 무조건으로 좋은 방법일까?
-> 프로그램의 명령어 및 모든 기계어는 컴퓨터의 메모리에 존재하므로, 반복문을 사용할 경우에 메모리 셀 7~10개만 사용하여 루프를 실행하므로 공간 측면에서 효율적이다.
속도도 느리고, 메모리 사용량도 많은데 왜 재귀함수를 사용하는가?
public int fibonacci(int n){ return n>=0 && n<=1 ? n : fibonacci(n-1) + fibonacci(n-2); }
꼬리 재귀의 핵심은 호출 당한 함수의 결과 = 호출한 함수의 결과 이다. (또한 꼬리 재귀를 이용하기 위해서는, 컴파일러가 꼬리 재귀를 지원해야 한다.)
return factorial(n - 1, n * total);
return n * factorial(n - 1);
import java.util.HashMap; import java.util.Map; public class FibonacciMemoization { private static Map<Integer, Long> memo = new HashMap<>(); public static long fibonacci(int n) { // 기본 케이스 if (n <= 1) { return n; } // 메모에 이미 계산된 값이 있는지 확인 if (memo.containsKey(n)) { return memo.get(n); } // 새로운 값 계산 long result = fibonacci(n - 1) + fibonacci(n - 2); // 계산된 값을 메모에 저장 memo.put(n, result); return result; } public static void main(String[] args) { int n = 50; long startTime = System.nanoTime(); long result = fibonacci(n); long endTime = System.nanoTime(); System.out.println("Fibonacci(" + n + ") = " + result); System.out.println("Calculation time: " + (endTime - startTime) / 1000000 + " ms"); } }
50번째 피보나치 항을 구하는 경우
반복문을 사용할지, 재귀를 사용할지는 아주 어려운 고민거리라고 할 수 있다.
시간 복잡도와 공간 복잡도를 비교해놓고 봤을 때, 프로젝트나 문제 상황에서 우선시 되는 것을 선택하면 될 것 같다.
The text was updated successfully, but these errors were encountered:
rlajm1203
No branches or pull requests
문제가 무엇인가?
과연 재귀함수가 좋을까 반복 loop가 좋을까?
왜 이런 문제를 선정하였는가?
함수형 프로그래밍을 지향하기 위해서는, 함수나 메소드 내부에서는 참조 투명성을 준수하고, 예외 지양, 재귀를 지향하라고 했다.
재귀롤 사용하는 게 무조건으로 좋은 방법일까?
자신이 생각한 답변은 무엇인가?
반복문
-> 프로그램의 명령어 및 모든 기계어는 컴퓨터의 메모리에 존재하므로, 반복문을 사용할 경우에 메모리 셀 7~10개만 사용하여 루프를 실행하므로 공간 측면에서 효율적이다.
재귀함수
왜 재귀 함수를 사용하는가?
속도도 느리고, 메모리 사용량도 많은데 왜 재귀함수를 사용하는가?
언제 재귀를 사용하는가?
꼬리 재귀 함수
꼬리 재귀의 핵심은 호출 당한 함수의 결과 = 호출한 함수의 결과 이다.
(또한 꼬리 재귀를 이용하기 위해서는, 컴파일러가 꼬리 재귀를 지원해야 한다.)
꼬리 재귀 이외의 해결책
50번째 피보나치 항을 구하는 경우
결론
반복문을 사용할지, 재귀를 사용할지는 아주 어려운 고민거리라고 할 수 있다.
시간 복잡도와 공간 복잡도를 비교해놓고 봤을 때, 프로젝트나 문제 상황에서 우선시 되는 것을 선택하면 될 것 같다.
The text was updated successfully, but these errors were encountered: