순환적인 피보나치 수열 프로그램
int fib(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return (fib(n-1)) + fib(n-2));
순환함수를 이용해서 단순하고 이해하기 쉽게 피보나치 수열을 계산하는 함수이다.
하지만 이 함수는 순환호출이 깊어질수록 비효율적이다.
이유는 중간에 계산되었던 값을 기억하지 못하고 다시 계산하기 때문이다. n이 작을 때는 중복 계산이 비교적 작지만 n 이 커지게 되면 엄청난 순환호출이 필요하게 된다.
반복적인 피보나치 수열 프로그램
int fibIter(int n) {
if (n < 2) return n;
else {
int tmp, curr = 1, last = 0;
for (int i = 2; i <= n; i++){
tmp = curr;
curr += last;
last = tmp;
}
return curr;
위와 같이 반복 구조를 이용하여 비보나치 수열 계산 함수를 구현하면 더 효율적으로 계산할 수 있다.
[파이썬]프로젝트 오일러 #2 (tistory.com)
[파이썬]프로젝트 오일러 #2
피보나치수열에서 400만 이하이면서 짝수인 항의 합 *피보나치 수열 :첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열 a = 1 b = 2 pibo = 0 sum = 2 while pibo
daybreakfrontline21.tistory.com
※피보나치 수열은 정의 자체가 순환적으로 되어있기 때문에 구현 할 때에 순환함수를 사용해서 구현하는 것이 일반적이지만 n이 커질수록 순환호출을 사용하는 방법이 무리가 될 수 있다.
'Note' 카테고리의 다른 글
[c++] 매개변수가 const인 함수의 함수사용 (0) | 2023.05.31 |
---|---|
[c++] reverseRecursive (0) | 2023.05.29 |
[c++] C++ 이러한 피연산자와 일치하는 연산자가 없습니다. (0) | 2023.05.07 |
[c++] 2차원배열의 동적할당 (0) | 2023.04.09 |
[c++] 파일 입출력 (0) | 2023.04.02 |